从java.util.logging中分离INFO和ERROR日志

use*_*196 6 java logging

我正在为Java应用程序配置日志记录.我的目标是两个日志:一个用于所有消息,一个用于高于特定级别的消息.

该应用程序使用java.util.logging.*类:我按原样使用它,所以我只能通过logging.properties文件进行配置.

我没有看到以不同方式配置两个FileHandler的方法:我见过的文档和示例设置了以下属性:

java.util.logging.FileHandler.level = INFO
Run Code Online (Sandbox Code Playgroud)

虽然我希望两个不同的处理程序在不同级别登录到不同的文件.

有什么建议?

Nic*_*cue 4

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html很有帮助。您只能为任何单个记录器设置一个级别(从记录器上的 setLevel() 方法可以看出)。但是,您可以采用两个常见级别中的最低级别,然后以编程方式进行过滤。

不幸的是,您不能仅使用配置文件来做到这一点。要仅使用配置文件进行切换,您必须切换到log4j之类的文件,您已经说过这不是一个选项。

因此,我建议使用过滤器更改代码中的日志记录,如下所示:

class LevelFilter implements Filter {
    private Level Level;
    public LevelFilter(Level level) {
        this.level = level;
    }
    public boolean isLoggable(LogRecord record) {
        return level.intValue() < record.getLevel().intValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在第二个处理程序上,执行 setFilter(new LevelFilter(Level.INFO)) 或其他操作。如果您希望它的文件可配置,您可以使用您自己编写的日志记录属性设置,并使用普通的属性方法。

我认为一旦您完成了设计,用于设置两个文件处理程序和编程代码的配置代码就相当简单,但如果您想要更多详细信息,请添加注释,我将进行编辑。