Spring Boot logback日志配置
admin 发布于:2022-05-09 10:06:50
阅读:loading
在好几年前学习log4j的时代,专门整理了log4j的知识点,形成了所谓的《适用的log4j整理》(关键字搜一搜能找出来),本着知识点收集汇总整理的原则,特将本站使用到的logback知识点进行整理汇总分享给大家。
知识点细节
(1)检查文件变化时自动重新加载,包含自动加载的间隔时间,debug模式查看logback运行状态;
(2)导入jar自带的默认xml文件,包含控制台输出彩色日志等配置;
(3)使用property定义名称和参数值;
(4)使用springProfile标签与spring.profiles.active激活环境来进行对应的参数值的设置,支持从application.yml文件中获取参数配置;
(5)自定义日志输出格式,支持控制台输出彩色日志,支持控制台输出代码类超链接点击跳转;
(6)输出至控制台的配置:过滤日志级别、字符编码、输出格式;
(7)输出至磁盘文件的配置:文件路径、文件编码、滚动策略(按时间周期、按文件大小、日志文件保留天数)、日志级别筛选;
(8)线程异步输出日志:队列大小;
(9)按文件个数压缩备份日志文件:文件名称、最小个数、最多个数;
(10)按天、按小时、按分钟输出日志文件;
(11)按package路径过滤日志输出级别、设置不追加写入主日志文件;
参考logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
configuration
scan:当此属性为true时,文件发生变化将自动加载,默认为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-->
<configuration scan="true" scanPeriod="3600000" debug="false">
<!-- 导入自带默认文件,含彩色日志等 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<contextName>chendd-logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!--开发环境:打印控制台-->
<property name="log.console.level" value="All" />
<springProfile name="dev">
<!-- 可以从application.yml文件中获取配置参数 -->
<!--<springProperty scope="context" name="log.path" source="log.path.dev"/>-->
<property name="log.path" value="logs" />
<property name="log.console.level" value="debug" />
</springProfile>
<springProfile name="test">
<property name="log.path" value="../logs" />
<property name="log.console.level" value="debug" />
</springProfile>
<springProfile name="prod">
<property name="log.path" value="../logs" />
<property name="log.console.level" value="info" />
</springProfile>
<!-- 彩色日志格式,由于存在语法高亮,故去掉了进程ID与线程名称等 -->
<property name="CONSOLE_LOG_PATTERN"
value="%d %clr(${LOG_LEVEL_PATTERN:-%5p}) [%thread] %cyan(at %class.%method) \\(%file:%line\\) : %m%n"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level \\(%logger{50}.%method:%line\\) - %msg%n"/>
<property name="FILE_LOG_PATTERN_ONLY_CONTENT" value="%msg%n"/>
<!--输出至控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${log.console.level}</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset><!-- 设置字符集 -->
</encoder>
</appender>
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/web/blog.root.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录,不按级别存储 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/web/blog.root-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 可按日志级别过滤 -->
<!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>-->
</appender>
<appender name="ASYNC_LOG_FILE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="LOG_FILE"/>
</appender>
<appender name="THREAD_RESOURCE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/web/log-access-thread.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN_ONLY_CONTENT}</pattern>
<charset>UTF-8</charset>
</encoder>
<!--按文件个数备份,未测试-->
<!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/web/log-access-thread-%d{yyyy-MM-dd.HH.mm}.log</fileNamePattern>
<!--日志文件保留时间,单位是分钟此处保留近10分钟的文件-->
<!--<maxHistory>10</maxHistory>-->
</rollingPolicy>
</appender>
<!--可按路径设置日志的输出级别,但此级别需要高于默认的root-level级别 -->
<logger name="org.springframework" level="info" />
<logger name="org.apache" level="info" />
<logger name="cn.chendd.core.logger.resource" level="info">
<appender-ref ref="THREAD_RESOURCE_LOG"/>
</logger>
<root level="${log.console.level}">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC_LOG_FILE" />
</root>
</configuration>
点赞
发表评论
当前回复:作者