五个级别
logback支持标准的五级日志,从低到高为:
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
用<logger>来按包配置日志级别
假设有程序的包结构如下:
net
ffish
demo // WARN级别
packageA
packageAA
packageB // INFO级别
packageBB
packageC
packageCC // DEBUG级别
- 全局默认日志级别为
WARN
- net.ffish.demo.packageB包下为
INFO
级别 - net.ffish.demo.packageC.packageCC为
DEBUG
级别
那你应当这样配置
<configuration>
...
<logger name="net.ffish.demo.packageB" level="INFO" />
<logger name="net.ffish.demo.packageC.packageCC" level="DEBUG" />
<root level="WARN">
</root>
</configuration>
很好理解:
<root>
为先祖配置<logger>
的name
属性定义包层级- 某一层级如果有对应
logger
明确设定日志级别,则采用设定级别 - 某一层级如果没有对应
logger
设定日志级别,则采用最近的祖先设定
下表是可能把你看懵了的官方解释
Example 1
Logger名字 | 设置的level | 生效level |
---|---|---|
root | DEBUG | DEBUG |
X | none | DEBUG |
X.Y | none | DEBUG |
X.Y.Z | none | DEBUG |
Example 2
Logger名字 | 设置的level | 生效level |
---|---|---|
root | ERROR | ERROR |
X | INFO | INFO |
X.Y | DEBUG | DEBUG |
X.Y.Z | WARN | WARN |
Example 3
Logger名字 | 设置的level | 生效level |
---|---|---|
root | DEBUG | DEBUG |
X | INFO | INFO |
X.Y | none | INFO |
X.Y.Z | ERROR | ERROR |
Example 4
Logger名字 | 设置的level | 生效level |
---|---|---|
root | DEBUG | DEBUG |
X | INFO | INFO |
X.Y | none | INFO |
X.Y.Z | none | INFO |
认识<appender>标签
<appender>
标签含有两个必填属性name
和class
。
name
设定<appender>
的名字,用于<appender-ref>
(参考上一篇的“为不同的<appender>配置日志级别)”。
class
指定打印工作类,logback提供了两种Appender
ch.qos.logback.core.ConsoleAppender
:输出到控制台ch.qos.logback.core.FileAppender
:输出到文件
日志既输出到控制台,又写到文件
下面两个appender同时被加在<root>
标签上,所有的日志,既会输出到控制台,又会输出到“net.ffish.log”文件中去。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>net.ffish.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
所有日志都输出到控制台,部分日志输出到文件
下面的配置,所有的日志都会输出到控制台,net.ffish.demo.packageA
到日志同时会输出到文件。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>net.ffish.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="net.ffish.demo.packageA">
<appender-ref ref="FILE" />
</logger>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
如果想
net.ffish.demo.packageA
到日志只输出到文件,不进控制台,那么需要打破<logger>
的继承机制,办法是为<logger>
增加如下属性设置:
<logger name="net.ffish.demo.packageA" additivity="false">
<appender-ref ref="FILE" />
</logger>
使用变量
简单的变量使用如下
<configuration scan="true" scanPeriod="60 seconds" debug="true">
<property name="LOG_LOCATION" value="/var/log" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_LOCATION}/mylog.log</file>
....
</appender>
</configuration>
其中<property>
标签定义了变量LOG_LOCATION
,使用它的方式是${LOG_LOCATION}
。
这里也可以引用系统变量,或其他配置文件中的变量,变量也有它的作用域,详细参考官网“Variable substitution”
飞鱼原创 https://ffish.net,未经允许,严禁转载!