文章目录
前言
应用日志是用来排查问题的基础,由于所解除的项目上,日志未做分割,日积月累后日志文件逐渐变的很大,占用存储不说,对于后续出现问题进行日志排查时,难以打开文件及查找。
而现有的log4j-1.2.15版本仅支持按天切割或者按文件大小切割,没有同时支持按天以及文件大小的切割方式(应该是1的版本都不支持),这使得当一天的日志量过大时,查看起来还是比较困难。
本文主要就是针对基于log4j进行扩展的增强日志分割方式:按天以及按文件大小的方式进行日志切割,并实现日志的定期压缩及删除,切换日志级别不用重启服务。
一、实现功能描述
- 支持设置日志文件生成的目录;
- 支持设置单个日志文件的大小;
- 支持设置每天日志文件的个数(超过则覆盖当天最早的日志);
- 支持设置日志输出的格式按照自定义方式设置;
- 支持设置日志输出等级,且不用重启服务;
- 支持每天定时设置清理30天之前的日志、压缩7天之前的日志。
二、解决方案
说明:本方案是基于log4j-1.2.25.jar、spring-web-1.2.8.jar包实现的,其他版本可参考。
1.自定义DailySizeRollingFileAppender处理类继承FileAppender
新增DailySizeRollingFileAppender.java文件,代码如下
package org.apache.log4j;
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.spi.LoggingEvent;
import java.io.File;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 自定义日志分割处理类
*/
public class DailySizeRollingFileAppender extends FileAppender {
protected long maxFileSize = 10485760L;
protected int maxBackupIndex = 1;
private long nextRollover = 0L;
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
public DailySizeRollingFileAppender() {
}
public DailySizeRollingFileAppender(Layout layout, String filename, boolean append) throws IOException {
super(layout, filename, append);
}
public DailySizeRollingFileAppender(Layout layout, String filename) throws IOException {
super(layout, filename);
}
public int getMaxBackupIndex() {
return this.maxBackupIndex;
}
public long getMaximumFileSize() {
return this.maxFileSize;
}
public void rollOver()