Browse Source

Merge pull request #1256 in CORE/base-third from release/10.0 to bugfix/10.0

* commit 'dc2d94b04173443a4d6d6aa44f6fed25bc20cd8d':
  REPORT-42043 fanruan.log无法分割-代码质量
  REPORT-42043 fanruan.log无法分割-代码质量
  REPORT-42043 fanruan.log无法分割-代码质量
  REPORT-42043 fanruan.log无法分割-加个volatile
  REPORT-42043 fanruan.log无法分割-多线程问题
  REPORT-42043 fanruan.log无法分割-代码质量
  REPORT-42043 fanruan.log无法分割
bugfix/10.0
superman 4 years ago
parent
commit
9af62acbd8
  1. 67
      fine-log4j/src/main/java/com/fr/third/apache/log4j/DailyRollingFileAppender.java

67
fine-log4j/src/main/java/com/fr/third/apache/log4j/DailyRollingFileAppender.java

@ -24,6 +24,7 @@ import com.fr.third.apache.log4j.spi.LoggingEvent;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.InterruptedIOException; import java.io.InterruptedIOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -302,7 +303,7 @@ public class DailyRollingFileAppender extends FileAppender {
} }
/** /**
Rollover the current file to a new file. * Rollover the current file to a new file.
*/ */
void rollOver() throws IOException { void rollOver() throws IOException {
@ -312,7 +313,7 @@ public class DailyRollingFileAppender extends FileAppender {
return; return;
} }
String datedFilename = fileName+sdf.format(now)+COMPRESS_SUFFIX; String datedFilename = fileName + sdf.format(now) + COMPRESS_SUFFIX;
// It is too early to roll over because we are still within the // It is too early to roll over because we are still within the
// bounds of the current interval. Rollover will occur once the // bounds of the current interval. Rollover will occur once the
// next interval is reached. // next interval is reached.
@ -329,51 +330,67 @@ public class DailyRollingFileAppender extends FileAppender {
} }
File file = new File(fileName); File file = new File(fileName);
boolean result = false; boolean isGzipSuccess = false;
FileInputStream fis = null; try (FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = null; FileOutputStream fos = new FileOutputStream(target);
GZIPOutputStream gzos = null; GZIPOutputStream gzos = new GZIPOutputStream(fos);) {
try {
fis = new FileInputStream(file);
fos = new FileOutputStream(target);
gzos = new GZIPOutputStream(fos);
byte[] inbuf = new byte[8102]; byte[] inbuf = new byte[8102];
int n; int n;
while ((n = fis.read(inbuf)) != -1) { while ((n = fis.read(inbuf)) != -1) {
gzos.write(inbuf, 0, n); gzos.write(inbuf, 0, n);
} }
result = true; isGzipSuccess = true;
} catch (Exception e){ } catch (Exception e) {
LogLog.error("Compress " + fileName + " to " + scheduledFilename + " failed."); LogLog.error("Compress " + fileName + " to " + scheduledFilename + " failed.");
LogLog.error(e.getMessage(), e); LogLog.error(e.getMessage(), e);
} finally {
if(gzos!=null) {
gzos.close();
}
if (fis != null) {
fis.close();
}
} }
if(result) { boolean isDeleteSuccess = true;
file.delete(); if (isGzipSuccess) {
LogLog.debug(fileName +" -> "+ scheduledFilename); isDeleteSuccess = file.delete();
LogLog.debug(fileName + " -> " + scheduledFilename);
} else { } else {
LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"]."); LogLog.error("Failed to rename [" + fileName + "] to [" + scheduledFilename + "].");
} }
try { try {
// This will also close the file. This is OK since multiple // This will also close the file. This is OK since multiple
// close operations are safe. // close operations are safe.
this.setFile(fileName, true, this.bufferedIO, this.bufferSize); this.setFile(fileName, true, this.bufferedIO, this.bufferSize);
} catch (IOException e) {
errorHandler.error("setFile(" + fileName + ", true) call failed.");
}
if(!isDeleteSuccess){
synchronized (this) {
if (scheduledFilename.equals(datedFilename)) {
return;
} }
catch(IOException e) { LogLog.debug("file delete failed, empty it.");
errorHandler.error("setFile("+fileName+", true) call failed."); emptyFile(file);
scheduledFilename = datedFilename;
} }
}else {
scheduledFilename = datedFilename; scheduledFilename = datedFilename;
} }
}
/**
* @param file empty file
*/
private static void emptyFile(File file) {
try(FileWriter fileWriter = new FileWriter(file)) {
if (!file.exists()) {
file.createNewFile();
}
fileWriter.write("");
fileWriter.flush();
} catch (IOException e) {
LogLog.debug("empty file failed:" + e.getMessage() + e);
}
}
/** /**
* This method differentiates DailyRollingFileAppender from its * This method differentiates DailyRollingFileAppender from its

Loading…
Cancel
Save