Java使用FileHandler创建三个单独的日志文件,但仅在通过cron运行时

时间:2012-04-15 11:43:08

标签: logging java cron

我有很奇怪的问题。

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

据我所知,当文件锁定时会发生这种情况,但我无法想到为什么会出现这种情况,特别是为什么它只发生在cron上。

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

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

    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拥有。

1 个答案:

答案 0 :(得分:0)

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

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