每次在log4j中重写到相同的日志文件

时间:2014-11-12 09:20:18

标签: java logging log4j

我有一个产品用于运行我的应用程序(我已经写过)。它是一个访问单个日志文件的多线程应用程序。我面临的问题是,每次启动应用程序日志文件时都会附加。只有当我重新启动产品时,才会创建新的日志文件。但我希望每次我的应用程序运行时,我只想在我的日志文件中添加新内容。

以下是代码。

//Log4j initialization
public void initLog4j() throws MyException {

    if (logfile != null ){
        myLog4j = Logger.getLogger("MY_LOG");           
        try {
            appender = new FileAppender(new PatternLayout("%m%n"),logfile.getAbsolutePath(),false);
            appender.setAppend(false);
            myLog4j.addAppender(appender);
            myLog4j.setLevel((Level) Level.DEBUG);
        } catch (IOException e) {
            throw new MyException(104, logfile.getAbsolutePath());
        }           

    }

//Stopping to write to log4j
public void stop() {        
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");        
    writeToLog4j(INFO,new StringBuilder(name).append(" stop: ").append(dateFormat.format(new Date())).toString(),true);
}

我到目前为止尝试的是我尝试删除该文件,但由于没有发布FileDescriptor,因此没有删除。所以我在stop()函数

中添加了以下代码
if(null != appender) {
        appender.close();
    }

生成此新文件或覆盖现有文件后。但是每次运行我的应用程序时,每次尝试写入logfile时都会收到以下消息

log4j:ERROR尝试附加到名为[null]的已关闭的appender。

请有人帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

错误消息表明您必须在关闭后删除appender。 似乎log4j不会自动执行此操作。