日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名

發布時間:2023/12/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 实现按日期生成文件夹文件名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。