官方文档 http://logback.qos.ch/manual/
一共有三个属性
debug
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
scan
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
指定日志输出格式,输出位置,相当于一个出口
2个主要属性
name
name指定appender名称
class
class指定appender的全限定名
encoder负责将事件转换为字节数组,并将该字节数组写入OutputStream。可以设置日志输出格式。
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %-5level [%thread] %logger{0}: %msg%npattern>
<charset>UTF-8charset>
encoder>
appender>
对日志进行过滤,常用的2中
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUGlevel>
filter>
appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFOlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
appender>
追加日志还是覆盖日志
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${basePath}self.logfile>
<append>trueappend>
<encoder>
<pattern>${pattern}pattern>
<charset>UTF-8charset>
encoder>
<prudent>falseprudent>
appender>
prudent=true表示日志写入线程安全,会降低效率,默认为false
配置如上
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${pattern}pattern>
<charset>UTF-8charset>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUGlevel>
filter>
appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${basePath}self.logfile>
<append>trueappend>
<encoder>
<pattern>${pattern}pattern>
<charset>UTF-8charset>
encoder>
<prudent>falseprudent>
appender>
滚动策略。具体策略由class指定。
TimeBasedRollingPolicy是最常用的滚动策略,根据时间滚动,当达到一定时间时,自动重新开辟一个日志文件
FixedWindowRollingPolicy根据固定窗口算法重命名文件的滚动策略
triggeringPolicy根据当前活动文件大小来决定是否滚动的策略
SizeAndTimeBasedRollingPolicy同时根据日期和文件大小的滚动测策略
<appender name="timeFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${basePath}RollingFile%d{yyyy-MM-dd}.logfileNamePattern>
<maxHistory>30maxHistory>
rollingPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${basePath}fixedFile%i.log.zipfileNamePattern>
<minIndex>1minIndex>
<maxIndex>3maxIndex>
rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MBmaxFileSize>
triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<maxFileSize>50MBmaxFileSize>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>${pattern}pattern>
<charset>UTF-8charset>
encoder>
appender>
logger是代码中获取用于输出的对象
3个主要属性
name
name属性可指定为包名或类名
level
声明输出级别
additivity
表示是否向父级logger传递打印消息,默认为true
以name属性为判断标准,同java类的包关系。
如下2个logger,第一个就是第二个的父级
<logger name="a.b" level="debug">
logger>
<logger name="a.b.c" level="debug">
logger>
若子logger没有指定level,则向父级找,以最近的一个父级的level为准,root节点是最高级,默认level是debug
如下3个logger,第二个logger的level就是info
<logger name="a" level="info">
logger>
<logger name="a.b">
logger>
<logger name="a.b.c" level="debug">
logger>
当 additivity = true 时,子logger输出一遍,父级还会输出一遍
如下3个logger, 获取 logger = LoggerFactory.getLogger(“a.b.c”),当用logger打印一个日志时,第三个会输出一次,第二个也会输出一次
<logger name="a" level="info">
logger>
<logger name="a.b" additivity="false">
logger>
<logger name="a.b.c" level="debug">
logger>
appender-ref指定输出位置,可以有0个或多个,0个就是没有输出位置,多个就是输出到多个位置
<logger name="a" level="info">
<appender-ref ref="stdout"/>
logger>
<logger name="a.b" additivity="false">
logger>
根logger,只需要指定一个 level
<springProperty name="basePath" source="log.path"/>
要想用这个标签,配置文件名不能命名为 logback.xml 或 logback-test.xml,因为那样这个配置文件就会在spring加载前加载,就找不到 application.yml中的参数
<configuration>
<contextName>myAppNamecontextName>
<springProperty name="basePath" source="log.path" defaultValue=""/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<property name="file_pattern"
value="%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n"/>
<property name="console_pattern"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console_pattern}pattern>
<charset>UTF-8charset>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUGlevel>
filter>
appender>
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${basePath}/debug.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${basePath}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gzfileNamePattern>
<maxFileSize>50MBmaxFileSize>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>${file_pattern}pattern>
encoder>
appender>
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${basePath}/info.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${basePath}/%d{yyyy-MM, aux}/info.%d{yyyy-MM-dd}.%i.log.gzfileNamePattern>
<maxFileSize>50MBmaxFileSize>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>${file_pattern}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFOlevel>
filter>
appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${basePath}/error.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${basePath}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gzfileNamePattern>
<maxFileSize>50MBmaxFileSize>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>${file_pattern}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
appender>
<root level="debug">
<appender-ref ref="stdout"/>
<appender-ref ref="debug"/>
<appender-ref ref="info"/>
<appender-ref ref="error"/>
root>
configuration>