- springboot默认使用的日志框架是logback;
- 想使用spring扩展profile支持,要以logback-spring.xml命名,其他如property需要改为springProperty
一、configuration
1. scan
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
2. scanPeriod
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
3. debug
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>
二、contextName
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录。
三、property
用来定义变量值的标签,property标签有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过property定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量
<property name="log.name" value="annoroad-log-demo"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n" />
<substitutionProperty name="log.base" value="./logs/${log.name}"/>
四、appender
1. 定义
用于定义日志如何输出
2. 属性
-
name:
用于定义该appender的名称,该名称需要在root或者logger的配置中使用
-
class:
用于指定实现该appender的实现类
-
- ConsoleAppender:
把日志添加到控制台
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
-
- FileAppender:
把日志添加到文件
-
- RollingFileAppender:
滚动记录文件,先将日志记录到指定文件,当符合某个条件是,将日志记录到其他文件,是FileAppender的子类
<!-- 定义appender的名称为logfile,用于在logger后者root中进行引用-->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定日志打印级别阈值,只能比logger或者root中设置的高,低了无效,如果logger中level设置的info,这里设置的warn,那么只打印warn级别往上的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<!-- 上面限制的是范围,这里可以针对单个进行处理,如下设置表示,只有info级别的日志才会被打印,其他的都会拒绝打印,当然前提是level或者上面的那个filter的级别设置的低于等于info才有效 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<!-- 表示如果是info则通过可以打印-->
<onMatch>ACCEPT</onMatch>
<!-- 表示如果不是info则拒绝,不可以打印-->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 设置日志文件的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--设置文件名的生成规则,以及日志文件存放的路径-->
<!-- 这里表示每天生成一个日志文件,我们可以修改成每月生成一个,或者每小时生成一个 -->
<FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- 最多保留10天的日志文件 -->
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<!-- 这里用来设置日志的打印格式 -->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
五、logger
1. 定义
用于指定什么包或者类下的什么类型的日志怎么输出
2. 属性
-
name:
用于指定要使用该logger配置的包名或类名(全路径)
-
additivity:
用来描述是否向上级logger传递打印信息。默认是true。
简单说就是需不需要将要打印的信息也让上级logger打印,如果为true的话,日志就会打印多遍。
<!-- 指定该logger控制test目录下的日志,并且不让不向上级传递打印信息 -->
<logger name="com.annoroad.log.demo.test" additivity="false">
<!-- 指定只打印info以上的日志 (TRACE、DEBUG、INFO、WARN、ERROR) -->
<level value="info"/>
<!-- 指定appender为demo,可以指定多个appender-->
<appender-ref ref="demo" />
<!--<appender-ref ref="logfile" />-->
</logger>
六、root
一种特殊的logger,其实也是logger,如果没有单独制定logger,默认就是用root
<root>
<level value="INFO"/><!-- TRACE、DEBUG、INFO、WARN和ERROR -->
<appender-ref ref="stdout"/>
</root>
七、例子
<configuration>
<!-- 定义日志文件名称 -->
<property name="log.name" value="annoroad-log-demo"/>
<!-- 定义日志格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n"/>
<!-- 定义日志存放目录-->
<substitutionProperty name="log.base" value="./logs/${log.name}"/>
<!-- 控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 控制台输出,限制level等级大于warn的才会输出 -->
<appender name="stdout2" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 输出到文件,一天换一个日志文件,只输出warn级别的日志,其他级别的日志都拒绝输出,日志文件最多存10天 -->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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">
<FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 输出到文件,一天换一个日志文件,只输出info级别以上的日志信息,但是不输出warn级别的日志,日志文件最多存10天 -->
<appender name="logfile2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/${log.name}2.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--
对于test文件夹下的日志输出:
trace级别以上的输出到控制台,
warn级别的日志输出到annoroad-log-demo.日期.log文件,
info级别以上,不包括warn级别的日志输出到annoroad-log-demo2.日期.log文件,
并且不向上级logger传递打印信息
-->
<logger name="com.annoroad.log.demo.test" additivity="false">
<level value="trace"/>
<appender-ref ref="stdout" />
<appender-ref ref="logfile" />
<appender-ref ref="logfile2" />
</logger>
<!--
对于test2文件夹下的日志,warn级别以上的日志输出的控制台,warn以下日志不输出,并且不向上级logger传递打印信息
-->
<logger name="com.annoroad.log.demo.test2" additivity="false">
<level value="info"/>
<appender-ref ref="stdout2" />
</logger>
<!--
对于starter下面的日志,debug级别以上的控制台输出,并且输出两遍,因为默认向上级logger传递打印信息,所以root也会进行打印
-->
<logger name="com.annoroad.springboot.starter">
<level value="debug"/>
<appender-ref ref="stdout"/>
</logger>
<!--
其它没有具体设置的都按此设置进行输出
-->
<root>
<level value="INFO"/>
<appender-ref ref="stdout"/>
</root>
</configuration>