日志级别
Trace < Debug < Info < Warn < Error.
Configuration节点
- 属性
- scan:若为true,则监听配置文件变化,变化后重新加载
- scanPeriod:监听变化的周期,单位为毫秒。
- 子节点
- logger:用来设置某一个包或者具体的某一个类的日志打印级别以及指定
- root:一个特殊的logger,当一条日志没有被其他logger捕获或者其他logger捕获后向上传递,那么root可以捕获该日志。
- appender:指定日志的输出格式,输出位置,进一步过滤日志级别。
logger节点
- 属性
- name:包名/类名,eg:com.fishweb。只有日志是在该范围下打印的,才会被logger捕获。
- level:过滤日志级别,只有>=该级别的日志,才会调用Appender输出。默认继承root.level,为debug。
- addtivity,是否向上级(root)传递该日志,默认为true。
- 子节点
- appender-ref:对捕获后的日志进行处理,可设置多个。
root节点
- 属性:只有level属性
- 子节点:appender-ref
appender节点
- 属性
- name:唯一id,在appender-ref中被引用。
- class:指定输出类,也是输出方式,常用ch.qos.logback.core.ConsoleAppender(控制台)与ch.qos.logback.core.rolling.RollingFileAppender(滚动文件)
- 子节点
- filter:过滤器,对日志进一步过滤,只有通过所有过滤器的日志,才会真正被处理。
- encoder:指定输出格式以及对二进制进行转换。
选定为ConsoleAppender时,appender无其他子节点。
选定为RollingFileAppender时,appender的子节点如下:
- append,是否追加到文件末尾(否则覆盖),默认为true.
- rollingPolicy,刷新策略,该节点属性如下
- class:滚动实现类,常用ch.qos.logback.core.rolling.TimeBasedRollingPolicy。
- FileNamePattern(TimeBasedRollingPolicy):文件名,必须含有%d{format},其中format为日期格式,与simpledateformat同。它指定了最小的时间单位,如%d{yyyy/MM/dd} -> 时间单位为天,每天产生一个文件;%d{yyyy/MM} -> 时间单位为月,每月产生一个文件。
- maxHistory:最多保存的周期数(天/月/..)
encoder节点
子节点为pattern,指定了输出格式,eg:
[%d{yyyy/MM/dd-HH:mm:ss.SSS}]-[%level]-[%thread]-[%X{requestId}]-[%class:%line]- %msg%n
filter节点
主要使用LevelFilter以及ThresholdFilter,由class属性指定。
* LevelFilter。
* level指定匹配的级别,单个匹配,而不是范围匹配。
* onMatch:符合时操作,可以选择抛弃日志等操作。
* onMisMatch;不符合时操作。
* ThresholdFilter。
* level,只有>=该level的日志被处理。
日志记录过程
日志产生 -> loggers -> [root] -> filters -> appender处理
DEMO
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy/MM/dd-HH:mm:ss.SSS}]-[%level]-[%thread]-[%X{requestId}]-[%class:%line]- %msg%n </pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出到文件,只处理>=ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!-- 每天形成一个文件,最多保留七天 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>./logs/fs-open-hr-admin-%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<maxHistory>30</maxHistory>
<!-- 文件>100M时,触发警告 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy/MM/dd-HH:mm:ss.SSS}-[%level]-[%X{requestId}]-%logger{10}:%line-%msg%n</pattern>
</encoder>
</appender>
<!-- 捕获由com.fishweb包下产生的,且级别>=Debug的日志记录,不向上级传播 --》
<logger name="com.fishweb" level="DEBUG" additivity="false">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT"/>
</logger>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>