如何配置特定FileHandler的属性

时间:2012-05-10 10:39:16

标签: java logging java.util.logging

Java日志记录配置文件允许我定义命名记录器的属性,例如

name.heikoseeberger.heikotron.level = FINE
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler

到目前为止,这么好。现在,我想配置特定的 FileHandler ,例如使用特定的输出文件。不幸的是,我只知道如何配置“global” FileHandler ,它已经存在于配置文件中:

java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

我不想配置这个,而是与我的自定义 Logger 相关联的实例。我已经尝试了以下内容,但没有成功:

name.heikoseeberger.heikotron.java.util.logging.FileHandler.pattern = %h/heikotron.log
name.heikoseeberger.heikotron.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

是否可以设置特定 FileHandler 实例的属性?如果是,那么如何识别/命名?

3 个答案:

答案 0 :(得分:1)

这是通过使用LogManger的顶级类文档中描述的config选项来完成的。使用公共构造函数创建公共命名类,并调用配置处理程序所需的所有java调用。然后在日志记录属性中指示LogManager加载您创建的类以配置处理程序。否则,您可以继承文件处理程序,该处理程序将创建要配置的自定义命名空间。

答案 1 :(得分:0)

我认为不可能。如果您查看FileHandler的源代码,您很快就会确定它使用字符串"java.util.logging.FileHandler.pattern“来确定用于记录目的的文件模式

private void configure() {
        LogManager manager = LogManager.getLogManager();

        String cname = getClass().getName();

        pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");
        limit = manager.getIntProperty(cname + ".limit", 0);
        //...
    }

因此,处理程序甚至不会考虑您放入文件的配置。

在我看来,处理程序并不知道存在任何特定的记录器(即name.heikoseeberger.heikotro n),他们只知道如何发布给定的LogRecord。

据我所知,特定记录器的处理程序是由LogManager创建的,通过反射调用它们的默认构造函数,因此,当创建给定的处理程序时,它不知道为哪个已请求特定记录器,这就是为什么所有属性都是通过自己的类名设置而不是通过记录器名称设置的。

答案 2 :(得分:0)

如果我理解正确,您正尝试使用java.util.logging包写入不同的日志文件。如果不延长它,就无法开箱即用。

如果您无法切换到Logback等其他日志记录框架,请检查答案 java util logging.properties: How to log to two different files并查看它是否符合您的需求。