1.appender的简介
Logback delegates the task of writing a logging event to components called appenders. Appenders must implement the ch.qos.logback.core.Appender interface. The salient methods of this interface are summarized below:
通过官方文档中的一段简介,可以看出 logback 将日志写入事件委托给名叫 appender的接口。
Appenders are ultimately responsible for outputting logging events. However, they may delegate the actual formatting of the event to a Layout or to an Encoder object. Each layout/encoder is associated with one and only one appender, referred to as the owning appender. Some appenders have a built-in or fixed event format. Consequently, they do not require nor have a layout/encoder. For example, the SocketAppender simply serializes logging events before transmitting them over the wire.
这个段引用又指出,appender里面可以有 Layout或者Encoder两个对象中的一个对象来指定日志输出格式,并且这两个对象只一对一的关联appender。 但是如果appender内置格式输出或者采用混合日志格式输出的话是可以不指定layout/encoer。所以某个appender没有layout/encoder也是可以的。
appender的继承关系树如下图:
从关系树中,我们可以看出appender 的下层抽象类一个线程不安全的类,而所有的日志输出器都是继承该抽象类来实现的。并且每个appender的实现类都可以通过 Encoder,Filter两个对象来格式化日志输出格式以及筛选日志。
OutputStreamAppender有两个属性如下:
一个指定的是Encoder就是前面所讲的两个格式化日志输出对象中的一个,而另外一个属性是指定日志写入是否及时刷新默认值时true可以确保appender发生异常的时候日志能不遗漏的正常写入到目的地。
2.ConsoleAppender控制台输出
从上述继承树中可以看出ConsoleAppender是Appender的一个实现类,其中这个Appender的属性如下:
其中他有两个自己的属性target 以及withJansi。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.FileAppender控制台输出
FileAppender 这个是我们平常项目中用到最多的一种。
其中有几个比较重要的属性
- append boolean 类型表示该日志文件是否启用追加功能,默认true,如果指定为false的话,当容器重启或者服务器重启时会生成新的日志文件把原有的覆盖
- file 日志文件的存储路径,在window下要将
\
变成\\
- prudent boolean 默认false 前面可以看出appender默认是不安全的,当多个线程操作同一个日志文件的时候可能会造成数据 不同步。可以根据需求设为true。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<