Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
生活随笔
收集整理的這篇文章主要介紹了
Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Log4j 不支持按日期生成不同的文件夾,通過重寫?RollingFileAppender ?的?rollOver 、?genFileName 、?subAppend 、?setFile 方法,實現我們的需求(每日生成不同的文件夾,*/20190808/*.log),日志文件格式 info_20190808_01.log .
重寫RollingFileAppender?類 import org.apache.log4j.RollingFileAppender; import org.apache.log4j.helpers.CountingQuietWriter; import org.apache.log4j.helpers.LogLog; import org.apache.log4j.spi.LoggingEvent;import java.io.File; import java.io.IOException; import java.io.InterruptedIOException; import java.text.SimpleDateFormat; import java.util.Date;/** 通過重寫?RollingFileAppender的rollOver、genFileName、subAppend、setFile 方法,實現我們的需求(每日生成不同的文件夾,* /2017103021/*.log),日志文件格式?pg_20171030_01.log .*/ public class Log4jRollingFileAppender extends RollingFileAppender { private long nextRollover = 0;private static SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");public void rollOver() {File target;File file;if (qw != null) {long size = ((CountingQuietWriter) qw).getCount();nextRollover = size + maxFileSize;}LogLog.debug("maxBackupIndex=" + maxBackupIndex);boolean renameSucceeded = true;if (maxBackupIndex > 0) {// 刪除序號最大(最早的文件)的文件/*file = new File(genFileName(fileName, maxBackupIndex));if (file.exists())renameSucceeded = file.delete();*/// 所有文件名序號加1for (int i = maxBackupIndex - 1; i >= 1 && renameSucceeded; i--) {file = new File(genFileName(fileName, i));if (file.exists()) {target = new File(genFileName(fileName, i + 1));renameSucceeded = file.renameTo(target);}}if (renameSucceeded) {target = new File(genFileName(fileName, 1));this.closeFile();file = new File(fileName);renameSucceeded = file.renameTo(target);if (!renameSucceeded) {try {this.setFile(fileName, true, bufferedIO, bufferSize);} catch (IOException e) {if (e instanceof InterruptedIOException) {Thread.currentThread().interrupt();}LogLog.error("setFile(" + fileName+ ", true) call failed.", e);}}}}if (renameSucceeded) {try {this.setFile(fileName, false, bufferedIO, bufferSize);nextRollover = 0;} catch (IOException e) {if (e instanceof InterruptedIOException) {Thread.currentThread().interrupt();}LogLog.error("setFile(" + fileName + ", false) call failed.", e);}}}private String genFileName(String name, int index) {String val = "_"+df.format(new Date())+"_";String fileName = "";if (index > 0) {String num = index < 10 ? "0" + index : String.valueOf(index);fileName = name.replace(".log", "") + val + num + ".log";} else {fileName = name;}return fileName;}protected void subAppend(LoggingEvent event) {super.subAppend(event);boolean flag = false;String[] _files = fileName.split("/");int len = _files.length;String file_name = _files[len-2];String new_file_name = df.format(new Date());if(!file_name.equals(new_file_name)){flag = true;fileName = fileName.replace(file_name, new_file_name);}if (fileName != null && qw != null) {long size = ((CountingQuietWriter) qw).getCount();if(flag){size = 0L;}if ((size >= maxFileSize && size >= nextRollover) || flag) {rollOver();}}}public void setFile(String file) {// Trim spaces from both ends. The users probably does not want// trailing spaces in file names.String val = file.trim();fileName = val.substring(0, val.lastIndexOf("/"))+"/"+df.format(new Date())+val.substring(val.lastIndexOf("/"), val.length());} }?
log4j.properties 代碼塊:
#log4j.rootCategory=debug,CONSOLE,D,I,W,E log4j.rootCategory=debug,CONSOLE,logFile ######################################################################## log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.encoding=UTF-8 log4j.appender.CONSOLE.layout.ConversionPattern=$PGFAST>[%d{MM-dd HH:mm:ss}][%-5p] %l >>>> <%m>%n ######################################################################## log4j.appender.logFile=com.thinkgem.jeesite.common.log4j.Log4jRollingFileAppender log4j.appender.logFile.encoding=UTF-8 log4j.appender.logFile.File=${catalina.home}/logs/pg.log log4j.appender.logFile.MaxFileSize=1KB log4j.appender.logFile.MaxBackupIndex = 10 log4j.appender.logFile.Append = true #log4j.appender.logFile.DatePattern='_'yyyyMMdd:HHmm:SSS'.log' log4j.appender.logFile.layout=org.apache.log4j.PatternLayout log4j.appender.logFile.layout.ConversionPattern=$PGFAST>[%d][%-5p] %l >>>> %m%n效果
?
?
總結
以上是生活随笔為你收集整理的Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android开发环境安装
- 下一篇: 安卓基本下载