RollingFileAppender
2024-09-04 11:36:25
http://logback.qos.ch/manual/appenders.html#RollingFileAppender
1.基于时间的滚动策略
TimeBasedRollingPolicy
就好比一个小车,推着走。车身所压的时间就是要保留日志的时间。
<configuration>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${catalina.base}/logs/${CONTEXT_NAME}/%d{yyyy-MM-dd}/logFile.%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy> <encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n
</pattern>
</encoder>
</appender> <root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
2.基于大小和时间的文件命名和触发策略
http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP
FNATP means File Naming And Triggering Policy
达到最大值便压缩;可根据每天时间变化生成文件夹。
可以设置两个rolling :INFO 和 ERROR .
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${catalina.base}/logs/${CONTEXT_NAME}/%d{yyyy-MM-dd}/mylog-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>1mb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender> <root level="DEBUG">
<appender-ref ref="ROLLING" />
</root> </configuration>
由以下代码可知,不加单位为byte, 单位只能加kb、mb、gb ,不区分大小写。
if (unitStr.equalsIgnoreCase("")) {
coefficient = 1;
} else if (unitStr.equalsIgnoreCase("kb")) {
coefficient = KB_COEFFICIENT;
} else if (unitStr.equalsIgnoreCase("mb")) {
coefficient = MB_COEFFICIENT;
} else if (unitStr.equalsIgnoreCase("gb")) {
coefficient = GB_COEFFICIENT;
} else {
throw new IllegalStateException("Unexpected " + unitStr);
}
return new FileSize(lenValue * coefficient);
注:1、 2 策略不能混用,因为不能同时生效
-------------------- 20190606 补充 -----------
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>D://data/fix.%d{yyyy-MM-dd-HH-mm}.%i.log.gz
</fileNamePattern>
<!-- 保留30(时间单位) -->
<maxHistory>30</maxHistory>
<!-- 单个文件最大 -->
<maxFileSize>20MB</maxFileSize>
<!-- 压缩后的fix文件总量,必须大于maxFileSize -->
<totalSizeCap>20MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread]%-5level%logger{50} - %msg%n</pattern>
</encoder>
</appender>
https://logback.qos.ch/manual/appenders.html
/**
* Given the FileNamePattern string, this method determines the compression
* mode depending on last letters of the fileNamePatternStr. Patterns ending
* with .gz imply GZIP compression, endings with '.zip' imply ZIP compression.
* Otherwise and by default, there is no compression.
*
*/
protected void determineCompressionMode() {
if (fileNamePatternStr.endsWith(".gz")) {
addInfo("Will use gz compression");
compressionMode = CompressionMode.GZ;
} else if (fileNamePatternStr.endsWith(".zip")) {
addInfo("Will use zip compression");
compressionMode = CompressionMode.ZIP;
} else {
addInfo("No compression will be used");
compressionMode = CompressionMode.NONE;
}
}
%d 按时间命名 i% 在之前基础上命名 以gz结尾就是gzip压缩
最新文章
- js立即调用的函数表达式
- Tornado框架简析
- c#使用多线程的几种方式示例详解
- centos 安装 svn
- ASP.NET MVC系列:为视图添加查询功能
- C++设计模式-Singleton
- lua标签解析器
- PHP empty函数判断0返回真还是假?
- HTML5入门十---Canvas画布实现画图(一)
- MVC5 Bundles发布到IIS失效问题解决方案
- [iOS基础控件 - 6.2] LOL英雄列表 UITableView单项显示
- ECSHOP在线手册布局参考图--文章列表页 article_cat.dwt
- bzoj 1096: [ZJOI2007]仓库建设 斜率優化
- SQLAlchemy框架用法详解
- Beta敏捷冲刺每日报告——Day4
- iOS中 SDWebImage手动清除缓存的方法 技术分享
- 使用Filter过滤器+重写Request完美解决乱码问题
- [leetcode]335. Self Crossing
- fft ocean注解
- Trailing Zeroes (I) LightOJ - 1028