diff --git a/platform-common/src/main/java/com/lyms/platform/common/log4j/DailyRollingFileAppender.java b/platform-common/src/main/java/com/lyms/platform/common/log4j/DailyRollingFileAppender.java new file mode 100644 index 0000000..dc78271 --- /dev/null +++ b/platform-common/src/main/java/com/lyms/platform/common/log4j/DailyRollingFileAppender.java @@ -0,0 +1,52 @@ +package com.lyms.platform.common.log4j; + +import org.apache.log4j.Layout; +import org.apache.log4j.helpers.QuietWriter; + +import java.io.File; +import java.io.IOException; + +/** + * + * 解决log4j BufferedIO=true 时,buffer有残余日志不能记录的问题 + * + * Created by jiangjiazhi on 2017/5/22. + */ +public class DailyRollingFileAppender extends + org.apache.log4j.DailyRollingFileAppender { + + public DailyRollingFileAppender() { + super(); + Runtime.getRuntime().addShutdownHook(new Log4jHockThread()); + } + + public DailyRollingFileAppender(Layout layout, String filename, + String datePattern) throws IOException { + super(layout, filename, datePattern); + Runtime.getRuntime().addShutdownHook(new Log4jHockThread()); + } + + @Override + public synchronized void setFile(String fileName, boolean append, + boolean bufferedIO, int bufferSize) throws IOException { + File logfile = new File(fileName); + + logfile.getParentFile().mkdirs(); + + super.setFile(fileName, append, bufferedIO, bufferSize); + } + + public QuietWriter getQw() { + return super.qw; + } + + private class Log4jHockThread extends Thread { + @Override + public void run() { + QuietWriter qw = DailyRollingFileAppender.this.getQw(); + if (qw != null) { + qw.flush(); + } + } + } + } \ No newline at end of file