如何阻止我的记录器编写多个日志文件实例?

bad*_*eat 2 java logging

我写了一个自定义记录器,其中唯一的添加是以下方法:

public static synchronized Logger getLogger(String name) {
    try {
        boolean append = true;
        FileHandler handler = new FileHandler("tmp.log", append);
        Logger      log     = Logger.getLogger(name);
        log.addHandler(handler);
        return log;
    } catch (java.io.IOException ex) {
        //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SecurityException ex) {
        //Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
    }
    return Logger.getLogger(name);
}
Run Code Online (Sandbox Code Playgroud)

它生成一系列日志文件tmp.log,tmp.log.1,tmp.log.2等.

我该如何防止这种情况发生?

Rom*_*eau 5

在logging.properties文件中,检查java.util.logging.FileHandler.limit是否设置为0.

来自文档:

java.util.logging.FileHandler.limit指定要写入任何一个文件的近似最大量(以字节为单位).如果这是零,那么没有限制.(默认为无限制).

对于一组旋转文件,当每个文件达到给定的大小限制时,它将被关闭,旋转并打开一个新文件.通过在基本文件名中添加"0","1","2"等来命名较旧的文件.

另一种可能性是您尝试从多个进程写入相同的日志文件.如果记录器检测到某个文件无法打开(它被另一个进程锁定),则会通过向其添加下一个空闲号码来创建一个新文件.