版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zombres/article/details/81019979
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。(这个功能可以在不重启运行环境下,调整打印日志的细节,方便定位问题)
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
Logger 可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN 和 ERROR
级别排序为: TRACE < DEBUG < INFO < WARN < ERROR
-->
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<!-- property 定义变量,可在下面引用 -->
<property name="log_dir" value="/data/logs/wxcalendar/reminder" />
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="30"/>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%file:%line] - %msg %xEx%n</pattern>
</encoder>
</appender>
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到<appender> 中,为<appender> 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。<appender> 有多个过滤器时,按照配置顺序执行。 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- prudent:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。 -->
<prudent>true</prudent>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径,使用zip,会自动对前一个日志进行压缩 -->
<fileNamePattern>${log_dir}/error-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
<maxHistory>${maxHistory}</maxHistory>
<!-- 最大64MB 超过最大值,会重新建一个文件-->
<maxFileSize>64 MB</maxFileSize>
</rollingPolicy>
<encoder>
<!-- 文件输出的日志 的格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
<charset>GBK</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
<!-- WARN级别日志 appender -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/warn-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
<charset>GBK</charset>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>${log_dir}/info-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
<charset>GBK</charset>
</encoder>
</appender>
<!-- 可以指定包或者类 -->
<logger name="com.tom" level="INFO">
<appender-ref ref="File"></appender-ref>
</logger>
<!--
root:
也是<loger>元素,但是它是根loger。只有一个level属性,应为已经被命名为"root".
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
-->
<root level="INFO">
<appender-ref ref="Console"/>
<!-- 文件输出 -->
<appender-ref ref="ERROR" />
<appender-ref ref="INFO" />
<appender-ref ref="WARN" />
</root>
</configuration>
上面的配置是log-back的一些配置,在springBoot中,还额外增加了 、 标签,springProfile标签用于区分各个环境下配置文件,在application.properties中配置了spring.profiles.active=xxx后,该标签会加载指定的日志配置文件。
如:logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">
<!-- scan日志刷新 scanPeriod不带单位时,单位为毫秒 -->
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- springProfile是springboot标签,可以配置运行时激活的配置 ,
另外还有springProperty可以读取properties内的属性值应用到logback配置文件中
-->
<springProfile name="dev">
<include resource="log/logback-spring-dev.xml" />
</springProfile>
<springProfile name="pre">
<include resource="log/logback-spring-test.xml" />
</springProfile>
<springProfile name="pro">
<include resource="log/logback-spring-pro.xml" />
</springProfile>
</configuration>
其中logback-spring-dev.xml、logback-spring-pre.xml、logback-spring-pro.xml三个配置文件分别是开发、测试、生产环境下的日志配置信息。
springProperty标签用于读取spring环境中property配置的属性值,springProperty有name属性,与logback中标签property作用类似,可以在配置文件的下文中通过${name}读取值。logback中配置定义有顺序,取值或者引用必须先声明后引用。
官文例子:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
....
</appender>