我们知道使用log4j可以设置日志文件达到指定容量后就会产生备份文件,该备份文件格式为 fileName+"."+number,实际应用中需要统一的后缀名,怎么样才能做到? 比如说 现在使用log4j-1.2.4.jar log.log 产生的备份是log.log.1,log.log.2,log.log.3...,但我们期望的结果是log1.log,log2.log,log3.log... 先下载log4j-1.2.4的源码,找到 RollingFileAppender.java-->rollOver, 详细如下
public void rollOver() {
File target;
File file;
LogLog.debug("rolling over count=" + ((CountingQuietWriter) qw).getCount());
LogLog.debug("maxBackupIndex="+maxBackupIndex);
// If maxBackups <= 0, then there is no file renaming to be done.
if (maxBackupIndex > 0) {
// Delete the oldest file, to keep Windows happy.
int position = fileName.lastIndexOf(".");
if (position != -1) {
String nameOne = fileName.substring(0, position);
String nameTwo = fileName.substring(position + 1, fileName.length());
String mulName = nameOne + maxBackupIndex + "." + nameTwo;
file = new File(nameOne + maxBackupIndex + "." + nameTwo);
} else
file = new File(fileName + '.' + maxBackupIndex);
if (file.exists())
file.delete();
}
// Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3, //
// 2}
for (int i = maxBackupIndex - 1; i >= 1; i--) {
position = fileName.lastIndexOf(".");
if (position != -1) {
String nameOne = fileName.substring(0, position);
String nameTwo = fileName.substring(position + 1, fileName.length());
String mulName = nameOne + i + "." + nameTwo;
file = new File(mulName );
if (file.exists()) {
mulName = nameOne + (i + 1)+"."+nameTwo;
target = new File( mulName );
LogLog.debug("Renaming file " + file + " to " + target);
file.renameTo(target);
}
}else {
file = new File(fileName + "." + i);
if (file.exists()) {
target = new File(fileName + '.' + (i + 1));
LogLog.debug("Renaming file " + file + " to " + target);
file.renameTo(target);
}
}
}
// Rename fileName to fileName.1
position = fileName.lastIndexOf(".");
if (position != -1) {
String nameOne = fileName.substring(0, position);
String nameTwo = fileName.substring(position + 1, fileName.length());
String mulName = nameOne + "1." + nameTwo;
target = new File( mulName );
} else
target = new File(fileName + "." + 1);
this.closeFile(); // keep windows happy.
file = new File(fileName);
LogLog.debug("Renaming file " + file + " to " + target);
file.renameTo(target);
try {
// This will also close the file. This is OK since multiple
// close operations are safe.
this.setFile(fileName, false, bufferedIO, bufferSize);
} catch(IOException e) {
LogLog.error("setFile("+fileName+", false) call failed.", e);
}
}
将log4j-1.2.4.jar解压,然后拷贝编译后新的RollingFileAppender.class 覆盖,再用jar -cvf log4j-1.2.4.jar 重新打包
log4j.appender.Client=org.apache.log4j.RollingFileAppender log4j.appender.Client.MaxFileSize=5KB log4j.appender.Client.MaxBackupIndex=10