java - log4j 中每次都重写到相同的日志文件

标签 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();
    }

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

log4j:ERROR 试图附加到名为 [null] 的已关闭附加程序。

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

最佳答案

错误消息表明您必须在关闭附加程序后将其删除。 看来 log4j 不会自动执行此操作。

关于java - log4j 中每次都重写到相同的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883282/

相关文章:

java - 如何将 HashMap 转换为可缓存的 map

java - 在java selenium中执行测试用例之前,我可以在桌面上显示消息吗?

java - 未找到数据库 EclipseLink

postgresql - 区分夏令时转换期间的时间

java - 尽管 isDebugEnabled 为真,但 log4j 调试消息未显示在控制台中

java - 默认 log4j MDC 值

java - 多个 Maven 模块中的 log4j.properties?

java - 打印按长度排序的字符串的所有可能的子字符串

C# - System.FormatException 类型的未处理异常 - 列出字符串以列出 int

git - 了解 git 日志图输出