appender是LogBack中负责打印日志任务的组件。每一个appender都实现了ch.qos.logback.core.Appender接口。
详细的文档可参考官网:LogBack用户手册——Appenders,本文只对实际项目中常用的配置项作说明。
<appender>
是<configuration>
的子节点,有两个必要属性name和class。name指定appender名称,class指定appender的全类名。<appender>节点根据不同的class,可以有<encoder>
、<filter>
、<file>
、<rollingpolicy>
等子节点。
下文将介绍几个常用的appender。
ConsoleAppender
顾名思义,这个appender是用来将日志打印在控制台的。这个在上篇LogBack的配置文件详解(一)中用到了很多次,例如配置:
1 | <?xml version="1.0" encoding="UTF-8"?> |
FileAppender
把日志添加到文件,有以下子节点:
<file>
:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。<append>
:如果是true,日志被追加到文件结尾,如果是false,清空现存文件,默认是true。<encoder>
:对记录事件进行格式化。(具体参数稍后讲解 )<prudent>
:如果是 true,日志会被安全的写入文件,即使其他JVM上的FileAppender也在向此文件做写入操作,效率低,默认是 false。
示例:
1 | <configuration> |
RollingFileAppender
滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。使用RollingFileAppender必须要设置rollingPolicy和triggeringPolicy。
RollingFileAppender有以下子节点:
<file>
:RollingFileAppender的file子节点可以设置也可以不设置。如果没有设置,会按照<rollingPolicy>
节点下的fileNamePattern中的值,自动创建对应的日志文件。<append>
:参考FileAppender中的说明。<encoder>
:参考FileAppender中的说明。<rollingPolicy>
:决定 RollingFileAppender 里的日志如何滚动,这会涉及文件移动和重命名。<triggeringPolicy>
: 设置 RollingFileAppender 何时触发日志滚动。<prudent>
:参考FileAppender中的说明。
rollingPolicy
TimeBasedRollingPolicy
最常用的滚动策略,它根据时间来制定滚动策略,例如每隔一天或者一个月滚动一次。它有以下子节点:
<fileNamePattern>
:这个节点用来定义日志文件名。它的值是一个文件名加一个%d
的转换说明符。
“%d”可以包含一个java.text.SimpleDateFormat指定的“日期-时间”格式,如:%d{yyyy-MM}。如果直接使用 %d,默认格式是 yyyy-MM-dd。<maxHistory>
:用来设置日志最多保罗多久。比如设置为30天,则30天以前的日志文件将被自动删除
encoder
负责两件事,一是把日志信息转换成字节数组,二是把字节数组写入到输出流。
目前PatternLayoutEncoder 是唯一有用的且默认的encoder ,有一个<pattern>
节点,用来设置日志的输入格式。参考前面的文章LogBack日志打印格式详解。另外一个<charset>
节点是用来设置字符串转为字节数组时使用的编码,默认是系统的charset。
例如:
1 | <encoder> |
filter
过滤器可以设置一个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。
- DENY,日志将立即被抛弃不再经过其他过滤器;
- NEUTRAL,有序列表里的下个过滤器过接着处理日志;
- ACCEPT,日志会被立即处理,不再经过剩余过滤器。
一个<Appender>
节点下可以有多个<filter>
节点,多个filter按照顺序执行。
常用的有两种过滤器:LevelFilter和ThresholdFilter
LevelFilter
LevelFilter是用来做精确过滤匹配的。对于LevelFilter设置的日志级别,过滤器会根据onMatch
和 onMismatch
的值接收或拒绝日志。它有三个子节点:
<level>
:设置过滤的日志级别<onMatch>
:用于配置对符合level级别的日志如何操作<onMismatch>
:用于配置对不符合level级别的日志如何操作
如下是一个配置示例:
1 | <?xml version="1.0" encoding="UTF-8"?> |
根据上面的配置,“console”这个appender只会打印info级别的日志。
打印效果如图:
ThresholdFilter
ThresholdFilter是一个范围过滤,用来过滤掉低于指定日志级别的。比如指定level为“WARN”,则只会打印大于和等于“WARN”级别的日志。比如上面的配置文件改成这样:
1 | <?xml version="1.0" encoding="UTF-8"?> |
v1.5.2