java.util.logging 和锁定文件的问题

5 java logging exception-logging

我有一个扫描一组文件的应用程序。这种扫描是并行进行的。我的意思是,如果我上传 5 个文件,将创建五个进程并开始并行执行作业。现在,为了记录正在运行的作业的异常,只有一个日志文件。接下来的问题是,记录器创建了很多日志文件 -

mylogfile.log(actual log file)

mylogfile.log.1

mylogfile.log.2

mylogfile.log.3

mylogfile.log.4

mylogfile.log.5
...
Run Code Online (Sandbox Code Playgroud)

及其各自的锁定文件。下面是我使用的代码片段:

  public static Logger getLogger(final String className) {
    final Logger logger = Logger.getLogger(className);
    FileHandler fh;
    try {
        // This block configure the logger with handler and formatter
        fh = new FileHandler("mylogfile.log", true);
        logger.addHandler(fh);
        logger.setLevel(Level.ALL);
        logger.setUseParentHandlers(false);
        fh.setFormatter(new SimpleFormatter());
    } catch (final SecurityException e) {
        //          }
    } catch (final IOException e) {
        //
    }
    return logger;
}
Run Code Online (Sandbox Code Playgroud)

我如何确保只使用一个日志文件来写入所有并行运行的作业的异常..?

谢谢,

安尼什

Mik*_*unu 1

这和并行调用没有太大关系。同样,从单线程每次调用 getLogger (即使使用相同的字符串作为参数),您也可以创建一个新的 FileHandler 并将其添加到现有记录器中。也许您不想每次调用 getLogger 时都进行所有设置 -方法。

//now we will create new Filehandler and set it to logger
getLogger("identifier").log(Level.SEVERE, "Log to   one file");
//now we have already one filehandler, but lets add one more
getLogger("identifier").log(Level.SEVERE, "Log to   two files");
//now we have already two filehandlers, but lets add one more
getLogger("identifier").log(Level.SEVERE, "Log to three files");       
Run Code Online (Sandbox Code Playgroud)

配置日志记录一次,之后您可以通过 java.util.loggingLogger.getLogger 获取对记录器的引用。Sun 的概述提供了如何通过属性文件配置日志记录的更多想法。