logback文档阅读

This commit is contained in:
asahi
2024-08-06 21:35:24 +08:00
parent 0f5f9327b9
commit 093eb9e9b2

View File

@@ -571,3 +571,152 @@ timestamp元素接收两个必填属性`key`和`datePattern`,并接收一
- timeReference : 默认情况下timestamp元素的值为当前配置文件被解析的事件也可以将其设为`contextBirth`即context创建时间 - timeReference : 默认情况下timestamp元素的值为当前配置文件被解析的事件也可以将其设为`contextBirth`即context创建时间
#### RollingFileAppender #### RollingFileAppender
`RollingFileAppender`继承了FileAppender并且支持了滚动日志的能力。RollgingAppender拥有如下子组件
- `RollingPolicy`:负责如何执行日志滚动操作
- `TriggeringPolicy`:负责决定是否/何时出发日志滚动
RollingFileAppender同时需要RollingPolicy和TriggerPolicy组件但是如果RollingPolicy实现了TriggerPolicy接口那么只需要RollingPolicy即可。
如下是RollingFileAppender的属性
- file: 值为String类型如果日志只被写到RollingPolicy指定的目标设备那么file属性可以为空
- append是否追加
- encoder同FileOutputStream
- rollingPolicy值为`RollingPolicy`类型
- triggeringPolicy值为`TriggeringPolicy`类型
- prudent
##### RollingPolicy
`RollingPolicy`负责日志滚动过程,其中涉及文件移动和重命名。
RollingPolicy接口展示如下
```java
package ch.qos.logback.core.rolling;
import ch.qos.logback.core.FileAppender;
import ch.qos.logback.core.spi.LifeCycle;
public interface RollingPolicy extends LifeCycle {
public void rollover() throws RolloverFailure;
public String getActiveFileName();
public CompressionMode getCompressionMode();
public void setParent(FileAppender appender);
}
```
其中,各方法代表含义如下:
- rollober: 将当前日志文件归档
- getActiveFileName计算当前日志文件的文件名实时日志将会被写入到其中
- getCompressionMode: 决定压缩模式
- setParent设置关联的FileAppender
##### TimeBasedRollingPolicy
TimeBasedRollingPolicy是最常用的rollingPolicy其基于时间来执行滚动操作可以通过其设置按天或按月滚动。
TimeBasedRollingPolicy同时实现了RollingPolicy和TriggeringPolicy接口。
TimeBasedRollingPolicy接收一个必填的`fileNamePattern`参数,并且拥有可选填参数:
- `fileNamePattern`: 该属性定义了已经被滚动(已被归档)文件的文件名,该属性的应该含有文件名,并且在适当位置加上`%d转换说明符`(%d{yyyy-MM-dd})。
> ##### %d转换说明符
> %d转换说明符包含一个date-and-time格式的字符串该格式和SimpleDateFormat相同。如果该date-and-time被省略那么默认为yyyy-MM-dd.
>
> 可以在fileNamePattern中含有多个%d转换说明符但是只能有一个`主%d转换说明符`,主%d转换说明符用于推断滚动周期。其他说有的%d转换说明符都需要通过`aux`来进行修饰(`%d{yyyy/MM, aux}`)。
>
> 示例如下
>
> `/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log`.
滚动周期的值将会从date-and-time表达式来推断。
RollingFileAppender中file属性可以被省略或设置为null。如果为RollingFileAppender设置了file属性那么可以解耦当前日志和已经被归档的日志。如果file属性的值那么当前日志路径就是file文件的值此时当前日志的路径不会随着日期的变动而改变。
但是在省略file属性的情形下那么当前日志文件路径将会根据fileNamePattern来计算
- `maxHistory`: `maxHistory`指定了保留归档日志的最大数量,会对旧日志进行异步删除。
如果将maxHistory设置为0将会禁用旧日志删除。默认情况下maxHistory被设置为0。
- `totalSizeCap``totalSizeCap`控制了所有归档日志文件的最大大小,当最大小超过阈值时,最老的文件将会被删除。`totalSizeCap`需要`maxHistory`属性也被设置通常totalSizeCap都在maxHistory之后被应用。
默认情况下totalSizeCap被设置为0代表不会有总大小的阈值限制。
- `cleanHistoryOnStart`如果该属性被设置为true当appender启动时归档日志将会被清除。
TimeBasedRollingPolicy支持文件自动压缩如果`fileNamePattern`后缀以`.gz``.zip`结尾,文件压缩将会自动被应用。
示例如下
```
/wombat/foo.%d.gz
```
上述示例当前日志被输出到`/wombat/foo.yyyy-MM-dd`文件中,但是在第二天触发归档后,文件将会被压缩到`/wombat/foo.yyyy-MM-dd.gz`中。
TimeBasedRollingPolicy示例如下
```xml
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} -%kvp- %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
```
#### SizeAndTimeBasedRollingPolicy
SizeAndTimeBasedRollingPolicy支持配置单个日志文件的最大大小其除了支持%d转换符外还支持%i转换符%i转换符也是必填的。每当当前日志文件达到最大文件大小时其都会递增`%i`序列号并且旧日志文件将会被归档。序列号从0开始。
SizeAndTimeBasedRollingPolicy还包含如下属性
- `maxFileSize`:每当当前日志文件达到`maxFileSize`指定的大小时其都会递增序列号序列号默认为0.
maxFileSize为FileSize类型可以通过`KB, MB, GB`等单位来指定。
- `checkIncrement`检查当前日志文大小的间隔时间默认为60s
```xml
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="ROLLING" />
</root>
</configuration>
```
#### Encoder
通常PatternLayoutEncoder其pattern可以指定为如下形式
```xml
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n
</Pattern>
</encoder>
```