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

时间:2016-09-09 14:39:31

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

否则,您需要确定在opening a new FileHandler之前关闭之前的FileHandler的正确时间。