java.util.Logger 创建的文件比应有的多

标签 java logging

嗨,这是我使用 java.util.Logger 的 CustomLogger 类

public class CustomLogger {
    private String pathToLogFiles = "/tmp/sos/logs/";
    private Logger logger;

    public CustomLogger(String prefix) {
        logger = Logger.getLogger(prefix);

        if( Utils.detectEnvironment() == Environment.LIVE ) {
            String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            String filename = "log_" + date + ".txt";
            FileHandler fileHandler = null;
            try {
                fileHandler = new FileHandler(this.pathToLogFiles + filename);
                logger.addHandler(fileHandler);
                fileHandler.setFormatter(new SimpleFormatter());
            } catch (IOException e) {
                logger.addHandler(new ConsoleHandler());
                this.error(e.getMessage());
            }
        }
        else {
            logger.addHandler(new ConsoleHandler());
        }
    }

    public void info(String message) {
        logger.info(message);
    }

    public void error(String message) {
        logger.warning(message);
    }
}

在开发环境中,记录到控制台工作正常,但在实时环境中,而不是记录到一个文件,因为它应该创建 12 个不同的文件,其中包含每条发送的日志消息的 xml。

:/tmp/sos/logs# ls
log_2016-09-09.txt    log_2016-09-09.txt.1.lck  log_2016-09-09.txt.2.lck  log_2016-09-09.txt.3.lck  log_2016-09-09.txt.4.lck  log_2016-09-09.txt.5.lck  log_2016-09-09.txt.6.lck
log_2016-09-09.txt.1  log_2016-09-09.txt.2      log_2016-09-09.txt.3      log_2016-09-09.txt.4      log_2016-09-09.txt.5      log_2016-09-09.txt.6      log_2016-09-09.txt.lck

有人可以告诉我那里出了什么问题吗?

谢谢

最佳答案

每次执行 CustomLogger 构造函数时,您都会创建并打开一个新的 FileHandler。您需要确保仅创建和添加 FileHandler once每个 JVM 进程。

否则,你需要在opening a new FileHandler之前确定一个合适的时间关闭之前的FileHandler。 .

关于java.util.Logger 创建的文件比应有的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414142/

相关文章:

java - 仅编译特定测试所需的源

java - 我想声明名字全名和姓氏,但在此java程序中给出了错误

java - 在 Java 中从数据库写入 (zip) 文件的最节省内存的方法是什么?

django - 如何手动发送 django 异常日志?

java - 哪个 Datanucleus 日志记录级别最全面?

java - 如何自定义 <s :fieldError/> tag? 的输出

java - 使用 Selenium 自动化聊天机器人时如何从最新的聊天气泡中获取文本

python - 日志中的自定义 Logger 类和正确的行号/函数名称

python - 动态地打印到同一控制台行

java - 使用的记录器数量