Appender
你可以定义多个appender
<appender name="Console-Appender" class="ch.qos.logback.core.ConsoleAppender">
<layout>
<pattern>%msg%n</pattern>
</layout>
</appender>
<appender name="File-Appender" class="ch.qos.logback.core.FileAppender">
<file>${LOG_PATH}/logfile-${timestamp-by-second}.log</file>
<encoder>
<pattern>%msg%n</pattern>
<outputPatternAsHeader>true</outputPatternAsHeader>
</encoder>
</appender>
name 和 class 为必须的属性
class 标志full qualified 的类名
name 属性代表的是这个appender 会被引用是使用的值
我们定义了一个名为File-Appender的文件追加器。此appender写入由<file>元素定义的文件。
Note: Encoders were introduced in Logback version 0.9.19. Due to the benefits that encoders provide, as explained here, it is recommended to use encoders instead of layouts. As a matter of fact, Logback has removed support for layouts in FileAppender and its sub-classes from version 0.9.19 onwards.
Logger
<logger name="guru.springframework.blog.logbackxml" level="info" additivity="fale">
<appender-ref ref="File-Appender"/>
<appender-ref ref="Console-Appender"/>
</logger>
<root>
<appender-ref ref="Console-Appender"/>
</root>
在上面的代码中,我们定义了两个记录器。由<logger>定义的第一个记录器配置guru.springframework.blog.logbackxml包下的所有记录器以使用文件追加器。 <root>定义的第二个是配置为使用控制台appender的根记录器。
activity
这里看到我们在logger中添加了activity属性为false
如果不加这个属性的话,root中如果同时添加了同一个appender,
例如这里的Console-Appender,那么会在console中同时打印两次相同的日志
Note:root 保底的logger ,如果定义的logger中的level属性没有配置,首先会去查看是否继承体系中是否有上级logger,如果有则使用上级的,直到最后的root 为止
logger 的分层命名规则
Loggers维护分层命名规则。例如,名为guru的logger是记录器的父记录,名为guru.springframework,logger的祖先名为guru.springframework.blog。
root -> guru -> guru.spring -> guru.spring.log
这里是按照包的命名来解析继承关系