Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置特定FileHandler的属性_Java_Logging_Java.util.logging - Fatal编程技术网

Java 如何配置特定FileHandler的属性

Java 如何配置特定FileHandler的属性,java,logging,java.util.logging,Java,Logging,Java.util.logging,Java日志配置文件允许我定义命名记录器的属性,例如 name.heikoseeberger.heikotron.level = FINE name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler 到目前为止,一切顺利。现在我想配置特定的文件处理程序,例如使用特定的输出文件。不幸的是,我只知道如何配置“全局”FileHandler,它已经存在于配置文件中: java.util.logging.FileHandl

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

name.heikoseeberger.heikotron.level = FINE
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler
到目前为止,一切顺利。现在我想配置特定的文件处理程序,例如使用特定的输出文件。不幸的是,我只知道如何配置“全局”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
我不想配置这个,但要配置与我的自定义记录器关联的实例。我已经尝试了以下方法,但没有成功:

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

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

我认为不可能。如果查看
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),他们只知道如何发布给定的日志记录


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

如果我理解正确,您正试图使用
java.util.logging
包在不同的日志文件中编写。如果不扩展它,就无法开箱即用

如果您无法切换到其他日志框架,如,请检查答案
并查看它是否适合您的需要。

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

'a property“config”。此属性旨在允许运行任意配置代码。因此,可以使用此属性加载另一个具有类到文件名映射的配置文件