根节点configuration
包含三个属性:
scan:设置为true时,如果配置文件发生改变,将会被重新加载,默认为true
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
子节点contextName
用户区分不同应用程序,每个logger都关联,默认default,不常用
子节点property
用来定义变量值,有name和value两个属性值。可以使用 ${} 来使用变量。
子节点timestamp
获取时间戳字符串,有key和datePattern两个属性,datePattern设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式
子节点appender
负责写日志的组件:name:appender名称;class:appender的全限定名
consoleAppender:
encoder:编码
pattern:日志输出格式
target:System.out(默认)和System.err
FileAppender:
file:文件名,可以是相对和绝对地址,不存在时自动创建
append:true追加写入,false覆盖写入,默认true
encoder:编码
pattern:日志输出格式
prudent:true安全但写入效率低,默认false
RollingFIleAppender:
file:文件名
append:true追加写入,false覆盖写入,默认true
rollingPolicy:发生滚动时,决定滚动的策略
class:ch.qos.logback.core.rolling.TimeBasedRollingPolicy 按时间切割日志文件
ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy 按文件大小切割日志文件
ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy 按时间和大小切割日志文件,注意中添加%i
子节点logger
name:指定约束的某一个包或具体类
level:打印级别,默认集成root
additivity:是否向上级传递,默认true
子节点root
也是一个logger元素,但是name确定,无additivity属性
level:打印级别,默认debug
示例
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<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" />
<springProperty scope="context" name="CONSOLE_FILTER_LEVEL" source="logging.filter.console.level" defaultValue="TRACE"/>
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${CONSOLE_FILTER_LEVEL}level>
filter>
appender>
<springProperty scope="context" name="APP_HOME" source="paas.app.home"/>
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="paas-module-example"/>
<springProperty scope="context" name="FILE_FILTER_LEVEL" source="logging.filter.file.level" defaultValue="TRACE"/>
<springProperty scope="context" name="LOG_TEMP" source="java.io.tmpdir" />
<springProperty scope="context" name="LOG_FILE_PREFIX" source="logging.file.prefix" defaultValue="paas."/>
<springProperty scope="context" name="LOG_FILE_SUFFIX" source="logging.file.suffix" defaultValue="log"/>
<property name="LOG_FILE_PATH" value="d:/module-connect-tool/log"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %logger : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE_PATH}/run.logfile>
<encoder>
<pattern>${FILE_LOG_PATTERN}pattern>
encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${FILE_FILTER_LEVEL}level>
filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>${LOG_FILE_CLEAN_HISTORY_ON_START:-false}cleanHistoryOnStart>
<fileNamePattern>${LOG_FILE_PATH}/run-%d{yyyy-MM-dd}.%i.log.zipfileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-100MB}maxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY:-30}maxHistory>
<totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-1GB}totalSizeCap>
rollingPolicy>
appender>
<logger name="FILE" level="INFO" additivity="false">
<appender-ref ref="FILE" />
logger>
<logger name="CONSOLE" level="INFO" additivity="false">
<appender-ref ref="CONSOLE" />
logger>
<root level="ERROR">
<appender-ref ref="CONSOLE" />
root>
configuration>
logback的filter详解:
filter是可以串联的
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFOlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFOlevel>
filter>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.0.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.12</version>
</dependency>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<expression>return message.contains("There is no session with id");expression>
evaluator>
<OnMatch>DENYOnMatch>
<OnMismatch>NEUTRALOnMismatch>
filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>MYBATISmarker>
evaluator>
<OnMismatch>NEUTRALOnMismatch>
<OnMatch>DENYOnMatch>
filter>
名词解释:
deny:日志将立即被抛弃不在经过其他过滤器
meutral:有序列表里的下个过滤器接着处理日志;(该级别既不处理,也不抛弃,相当于没有任何处理,日志会被保存下来并在本appender被执行)
accept:日志会被立即处理,不再经过剩余过滤器