优化日志分割
parent
1532a14c0f
commit
7d925b78b6
@ -0,0 +1,125 @@
|
|||||||
|
package com.xypower.mpmaster;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.logging.Formatter;
|
||||||
|
import java.util.logging.LogRecord;
|
||||||
|
import java.util.logging.StreamHandler;
|
||||||
|
|
||||||
|
public class RotatingHandler extends StreamHandler {
|
||||||
|
|
||||||
|
private long mPrevMillis;
|
||||||
|
private String mLogFilePath;
|
||||||
|
|
||||||
|
public RotatingHandler(String filePath, Formatter formatter) {
|
||||||
|
// super(null, formatter);
|
||||||
|
|
||||||
|
mPrevMillis = 0;
|
||||||
|
mLogFilePath = filePath;
|
||||||
|
|
||||||
|
File file = new File(mLogFilePath);
|
||||||
|
File parentFile = file.getParentFile();
|
||||||
|
if (!parentFile.exists()) {
|
||||||
|
parentFile.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file.exists()) {
|
||||||
|
long millis = file.lastModified();
|
||||||
|
millis -= millis % 1000;
|
||||||
|
|
||||||
|
Date dt = new Date(millis);
|
||||||
|
dt.setHours(0);
|
||||||
|
dt.setMinutes(0);
|
||||||
|
mPrevMillis = dt.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
FileOutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = new FileOutputStream(file, true);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
setFormatter(formatter);
|
||||||
|
setOutputStream(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void publish(LogRecord record) {
|
||||||
|
if (!isLoggable(record)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPrevMillis == 0) {
|
||||||
|
long millis = record.getMillis();
|
||||||
|
millis -= millis % 1000;
|
||||||
|
Date dt = new Date(millis);
|
||||||
|
dt.setHours(0);
|
||||||
|
dt.setMinutes(0);
|
||||||
|
mPrevMillis = dt.getTime();
|
||||||
|
} else {
|
||||||
|
long millis = record.getMillis();
|
||||||
|
if (millis - mPrevMillis >= 86400000) {
|
||||||
|
// Date changed
|
||||||
|
Date dt = new Date(mPrevMillis);
|
||||||
|
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
String str = fmt.format(dt);
|
||||||
|
|
||||||
|
File file = new File(mLogFilePath);
|
||||||
|
File parentFile = file.getParentFile();
|
||||||
|
String fileName = file.getName();
|
||||||
|
String baseName = null;
|
||||||
|
String extName = null;
|
||||||
|
int pos = fileName.lastIndexOf('.');
|
||||||
|
if (pos > 0) {
|
||||||
|
baseName = fileName.substring(pos);
|
||||||
|
extName = fileName.substring(pos);
|
||||||
|
} else {
|
||||||
|
baseName = fileName;
|
||||||
|
extName = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String newFileName = fileName + "-" + str;
|
||||||
|
File newFile = null;
|
||||||
|
int idx = 1;
|
||||||
|
do {
|
||||||
|
newFile = new File(parentFile, newFileName + extName);
|
||||||
|
if (newFile.exists()) {
|
||||||
|
try {
|
||||||
|
file.renameTo(newFile);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
newFileName = fileName + "-" + str + "." + Integer.toString(idx);
|
||||||
|
idx ++;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
|
FileOutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = new FileOutputStream(mLogFilePath, true);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
setOutputStream(out);
|
||||||
|
|
||||||
|
dt = new Date(millis);
|
||||||
|
dt.setHours(0);
|
||||||
|
dt.setMinutes(0);
|
||||||
|
mPrevMillis = dt.getTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.publish(record);
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue