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

标签 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
...

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

  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;
}

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

谢谢,

安尼施

最佳答案

我遇到了同样的问题,我缺少的是一个标准的编程实践,即我应该在完成日志记录后关闭文件处理程序。 因此,您可以创建多个记录器,但请确保在最后关闭它们。

以下示例中的 2 行:

  • successLogFileHandler.close();
  • failureLogFileHandler.close();

class LoggerExample {
    private Logger  loggerFailure;
    private Logger  loggerSuccess;

    public void myLogger() {
        // some code block
        FileHandler successLogFileHandler = new FileHandler(successLogFile.getAbsolutePath());
        FileHandler failureLogFileHandler = new FileHandler(failureLogFile.getAbsolutePath());
        // Create loggers
        loggerFailure = createLogger(STR_FAILURE_LOG_FILE, failureLogFileHandler, Level.INFO, customFormatter);
        loggerSuccess = createLogger(STR_SUCCESS_LOG_FILE, successLogFileHandler, Level.INFO, customFormatter);
        // Write messages into loggers
        // and at the end close the file handlers
        successLogFileHandler.close();      
        failureLogFileHandler.close();
    }

    public static Logger createLogger(String strLoggerName, FileHandler handler, Level level, Formatter formatter) throws Exception
    {
        Logger logger = Logger.getLogger(strLoggerName);
        logger.setLevel(level);
        handler.setFormatter(formatter);
        logger.addHandler(handler);
        return logger;
    }
}

关于java - java.util.logging 和锁定文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154025/

相关文章:

java - 为什么初始化数组后我无法在数组中分配某些值?

java - 如何使用jdbi和dropwizard使用@Transaction实现提交和回滚

asp.net-core - 如何在 ABP 中获得更详细的异常?

elmah - 你如何集中 ELMAH 日志

java - Gradle守护程序从hs_log_pid ####。log开始崩溃

java - JNI : Calling a java method from C periodically is not working

java - 客户端登录Applet

python - 将 FastAPI 中的请求记录到项目目录中的特定文件中

git - git log --branch 在普通和裸存储库上有不同的行为吗?

javascript - 在 JavaScript 中记录异常,捕获堆栈跟踪