Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次在log4j中重写相同的日志文件_Java_Logging_Log4j - Fatal编程技术网

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

Java 每次在log4j中重写相同的日志文件,java,logging,log4j,Java,Logging,Log4j,我有一个产品,我使用它运行我的应用程序(我已经编写)。它是一个访问单个日志文件的多线程应用程序。我面临的问题是,每次启动应用程序时,都会附加日志文件。只有在重新启动产品时,才会创建新的日志文件。但我希望每次应用程序运行时,我只希望日志文件中有新内容 下面是代码 //Log4j initialization public void initLog4j() throws MyException { if (logfile != null ){ myLog4j = Logge

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

下面是代码

//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()函数中添加了以下代码

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

log4j:尝试附加到名为[null]的已关闭附加程序时出错


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

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

以编程方式配置log4j有什么原因吗?没有具体原因。我觉得很容易。我不太了解属性文件以及如何在log4j中使用它们。用属性文件可以解决这个问题吗??如果是,如何创建?仍然不清楚何时创建新的日志文件。“当我重新启动产品”和“每次我的应用程序运行”之间的区别是什么……我有一个插件产品,我为它编写了一个插件。现在我正在测试我的插件。要运行我的应用程序,我需要启动插件产品。如果每次创建新日志文件时都重新启动此插件产品。但不是在我刚运行插件(应用程序)时,您在调用close()并将其添加到myLog4j后启动了一个新的appender吗?另外,我想你应该在关闭appender后将其移除。不太确定,因此评论,不回答。
if(null != appender) {
        appender.close();
    }