0

我遇到了很奇怪的问题。

我每 10 分钟运行一个小型 Java 应用程序来完成一些数据库工作。它将其活动记录在一个文件中。这工作得非常好,除非它作为 cron 作业运行,当它莫名其妙地创建 4 个单独的日志文件副本时。a.log,a.log0,a.log1,a.log2。

我知道当文件被锁定时它会这样做,但我想不出为什么会出现这种情况,尤其是为什么它只发生在 cron 上。

它能够将日志信息写入所有四个文件,包括正确的一个,那么为什么要创建额外的三个?

我在应用程序生命结束时关闭 FileHandlers,所以不是这样。设置很简单:

    rootLogger = LogManager.getLogManager().getLogger("");

    //remove current handlers
    for (Handler h : rootLogger.getHandlers()){
        rootLogger.removeHandler(h);
    }

    Handler infohandler    = new FileHandler ("/dir/info.log",  true);
    Handler errorhandler   = new FileHandler ("/dir/error.log", true);

    Formatter format = new CustomFormatter();
    infohandler .setFormatter(format); 
    errorhandler.setFormatter(format);

    infohandler .setLevel(Level.INFO);
    errorhandler.setLevel(Level.WARNING);

    rootLogger.addHandler(infohandler);
    rootLogger.addHandler(errorhandler);

和:

infohandler.close(); errorhandler.close();

我现在只调用一次该函数,其中:

rootLogger.log(Level.INFO, "Log this");

cron 任务非常简单:

*/10 * * * * root /usr/bin/java -jar /dir/db_clean.jar

有任何想法吗?这让我很难过。

权限都是-rw-r--r--,并归root所有。

4

1 回答 1

0

这看起来很相关:http: //developer.classpath.org/doc/java/util/logging/FileHandler-source.html

在第一条评论中,最后提到的一件事描述了指定模式的结果,该模式创建了您描述的 3 个文件。也许知道为什么会引导您找到解决方法的答案。

于 2012-05-01T12:45:31.557 回答