我遇到了很奇怪的问题。
我每 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所有。