Java FileAppender为每天创建新日志文件
我已经创建了一个appender,它创建日志并将日志写入文件名中的当前日期,如下所示: 文件名_18052014.log 问题是我的appender应该每天在00:00:00创建新文件并在那里写入日志。但这并没有发生,它仍然会写入旧文件,并且不会创建新文件 我的代码:Java FileAppender为每天创建新日志文件,java,log4j,Java,Log4j,我已经创建了一个appender,它创建日志并将日志写入文件名中的当前日期,如下所示: 文件名_18052014.log 问题是我的appender应该每天在00:00:00创建新文件并在那里写入日志。但这并没有发生,它仍然会写入旧文件,并且不会创建新文件 我的代码: package com.comarch.log4j; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date;
package com.comarch.log4j;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.FileAppender;
public class DateFormatFileAppender extends FileAppender {
private String fileName = "";
public DateFormatFileAppender() {
setFile("");
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException {
super.setFile(generateFileName(), append, bufferedIO, bufferSize);
}
private String generateFileName() {
SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
String dateString = df.format(new Date());
return String.format("%s_%s.log", getFileName(), dateString);
}
}
你知道怎么做吗
你觉得这个解决方案怎么样?方法append被扩展
package com.comarch.log4j;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.FileAppender;
public class DateFormatFileAppender extends FileAppender {
private String fileName = "";
private int day;
public DateFormatFileAppender() {
setFile("");
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException {
if (!getFile().equals(""))
super.setFile(fileName, append, bufferedIO, bufferSize);
}
public void append(LoggingEvent event) {
if (Calendar.DAY_OF_MONTH != day) {
setFile(generateFileName());
activateOptions();
}
super.append(event);
}
private String generateFileName() {
SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
String dateString = df.format(new Date());
return String.format("%s_%s.log", getFileName(), dateString);
}
}
为什么不改用a呢?或者更好的是,阿佩德已经处理好了吗?@Makoto-你能给我写更多的细节吗?我不知道RollingFileAppender是否适合我。今天,Appender应该将日志指向filename_18052014.log,tommorow指向filename_18052014.log等,在这些地方应该配置文件名。不过,滚动文件Appender会为您解决这个问题;您只需要提供文件名,它将调整日期。诚然,你的例子两天都是一样的,这有点令人担忧。@Makoto,我编辑了我的帖子-你觉得我的解决方案怎么样?我扩展了append方法并检查文件是否应该更改。性能如何?我认为-此解决方案已经被现有的
RollingFileAppender
实现和现有的Log4J配置设置捕获。