前言
log4j提供了DailyFileAppender和RollingFileAppender两种方式存储,但不支持同时使用两种方式,需自定义类继承FileAppender,实现日志记录同时满足按日期和限制文件大小分割。
实现效果:

日期按目录归类,同一天的日志假定文件名为sql,存放在sql中,但sql文件超出限制文件大小,更名为“sql_1.log”,再新建一个sql文件,以此循环。
换句话说,当前写入日志永远是在sql文件,但当天的完整日志写入顺序是:
sql_1.log,sql_2.log, … , sql
实现过程:
编写log4j.properties配置文件:
log4j.rootLogger = console,file
#console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#file
log4j.appender.file=com.log4jdemo.DailyRollingFileAppender
log4j.appender.file.Threshold=INFO
#注意file路径与项目对齐
log4j.appender.file.File=./logs/yyyy-MM-dd/sql
log4j.appender.file.MaxBackupIndex=-1
log4j.appender.file.MaxFileSize=10KB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %m%n
log4j.appender.file.append=true
自定义DailyRollingFileAppender类扩展FileAppender类:
public class DailyRollingFileAppender extends FileAppender {
/**
* The default maximum file size is 10MB.
*/
protected long maxFileSize = 10 * 1024 * 1024;
/**
* There is one backup file by default.
*/
protected int maxBackupIndex = 1;
/**
* The default constructor does nothing.
*/
public DailyRollingFileAppender() {
}
/**
* ouput destination for this appender.
*/
public DailyRollingFileAppender(Layout layout, String filename) throws IOException {
super(layout, filename, true);
activateOptions();
}
/**
* being rolled over to backup files.
*
* @since 1.1
*/
public long getMaximumFileSize() {
return maxFileSize;
}
/**
* being rolled over to backup files.
*
* <p>
* JavaBeans {@link java.beans.Introspector Introspector}.
*
* @see #setMaxFileSize(String)
*/
public void setMaximumFileSize(long maxFileSize) {
this.maxFileSize = maxFileSize;
}
/**
* being rolled over to backup files.
*
* <p>
* the value "10KB" will be interpreted as 10240.
*/
public void setMaxFileSize(String value) {
maxFileSize = OptionConverter.toFileSize(value, maxFileSize + 1);
}
/**
* Returns the value of the <b>MaxBackupIndex</b> option.
*/

最低0.47元/天 解锁文章
779

被折叠的 条评论
为什么被折叠?



