log4j-在RollingFileAppender基础上为日志文件添加时间戳
- 修改后的代码
package com.xxx.adapter.util.logUtil;
import java.io.File;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.helpers.CountingQuietWriter;
import org.apache.log4j.RollingFileAppender;
import org.apache.log4j.helpers.LogLog;
public class MyLogAppend extends RollingFileAppender {
private String datePattern = "'.'yyyy-MM-dd";
public void setDatePattern(String pattern) {
datePattern = pattern;
}
public String getDatePattern() {
return datePattern;
}
@SuppressWarnings("unused")
private long nextRollover = 0;
public
void rollOver() {
File target;
File file;
if (qw != null) {
long size = ((CountingQuietWriter) qw).getCount();
LogLog.debug("rolling over count=" + size);
nextRollover = size + maxFileSize;
}
LogLog.debug("maxBackupIndex=" + maxBackupIndex);
boolean renameSucceeded = true;
if (maxBackupIndex > 0) {
String[] dateStr = new SimpleDateFormat(datePattern).format(new Date()).split("\\.");
file = new File(fileName + dateStr[0] + '.' + maxBackupIndex + '.' + dateStr[dateStr.length - 1]);
delmaxBackupIndexFile(fileName);
for (int i = maxBackupIndex - 1; i >= 1 && renameSucceeded; i--) {
file = regexFiles(fileName, i);
if (file.exists()) {
target = new File(fileName + dateStr[0] + '.' + (i + 1) + '.' + dateStr[dateStr.length - 1]);
LogLog.debug("Renaming file " + file + " to " + target);
renameSucceeded = file.renameTo(target);
}
}
if (renameSucceeded) {
target = new File(fileName + dateStr[0] + "." + 1 + '.' + dateStr[dateStr.length - 1]);
this.closeFile();
file = new File(fileName);
LogLog.debug("Renaming file " + file + " to " + target);
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);
}
}
}
public void delmaxBackupIndexFile(String directoryPath) {
File file = regexFiles(directoryPath, maxBackupIndex);
if (file.exists()) {
file.delete();
}
}
public File regexFiles(String directoryPath, int index) {
directoryPath = directoryPath.replaceAll("\\\\", "/");
String[] str = directoryPath.split("/");
directoryPath = directoryPath.substring(0, directoryPath.lastIndexOf(str[str.length - 1]) - 1);
File baseFile = new File(directoryPath);
if (baseFile.isFile() || !baseFile.exists()) {
return new File("not exist this file");
}
File[] files = baseFile.listFiles();
for (File file : files) {
if (file.isFile()) {
String fileName = file.getAbsolutePath();
int start = fileName.lastIndexOf(".");
String _str = fileName.substring(start - 1, start);
if (String.valueOf(index).equals(_str)) {
return file;
}
}
}
return new File("not exist this file");
}
}
- log4j.properties
log4j.appender.file=com.xxx.adapter.util.logUtil.MyLogAppend
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.File=${catalina.home}/xxx-logs/log.log
log4j.appender.file.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.Append = true
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n