目前PatternLayoutEncoder是唯一有用的且默认的encoder,有一个<pattern>节点,就像上面演示的,用来设置日志的输入格式,使用“%+转换符"的方式,如果要输出"%"则必须使用"\%"对"%"进行转义。
<encoder>的一些可用参数用表格表示一下:
转换符 作 用 是否避免使用c{length}
lo{length}
logger{length}
输出日志的logger名称,可有一个整型参数来缩短<logger>名称,有几种情况:
1、不输入表示输出完整的<logger>名称
2、输入0表示只输出<logger>最右边点号之后的字符串
3、输入其他数字表示输出小数点最后边点号之前的字符数量
否
C{length}
class{length}
输出指定记录的请求的调用者的全限定名,length同上 是d{pattern}
date{pattern}
输出时间格式,模式语法同java.text.SimpleDateFormat兼容 否caller{depth} 输出生成日志的调用者的位置信息,整数选项表示输出信息深度 否
L 输出执行日志的请求行号 是
m
msg
message
输出应用程序提供的信息 否m 输入执行日志请求的方法名 是
n 输出平台相关的分行符"\n"或者"\r\n",即换行 否
p
le
level
输出日志级别 否r
relative
输出从程序启动到创建日志记录的时间,单位为毫秒 否t
thread
输出产生日志的线程名称 否看到最后一列是"是否避免使用",这是因为这些信息是无法直接拿到的(比如请求行号、调用方法名),logback必须通过一些特殊手段去获取这些数据(比如在日志打印出产生一个堆栈信息),这种操作会比较影响效率,因此除非必要,否则不建议打印这些数据。
Filter
最后来看一下<filter>,<filter>是<appender>的一个子节点,表示在当前给到的日志级别下再进行一次过滤,最基本的Filter有ch.qos.logback.classic.filter.LevelFilter和ch.qos.logback.classic.filter.ThresholdFilter,首先看一下LevelFilter:
<configuration scan="false" scanPeriod="60000" debug="false">
<appender>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
<filter>
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger additivity="false" />
<logger level="DEBUG">
<appender-ref ref="STDOUT" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
看一下输出:
2018-03-31 22:22:58.843 [main] WARN java.lang.Object - =====warn=====