Java FileAppender为每天创建新日志文件

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;

我已经创建了一个appender,它创建日志并将日志写入文件名中的当前日期,如下所示:

文件名_18052014.log

问题是我的appender应该每天在00:00:00创建新文件并在那里写入日志。但这并没有发生,它仍然会写入旧文件,并且不会创建新文件

我的代码:

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配置设置捕获。