Hei*_*ger 6 java logging java.util.logging
Java日志记录配置文件允许我定义命名记录器的属性,例如
name.heikoseeberger.heikotron.level = FINE
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在我想配置特定的 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
Run Code Online (Sandbox Code Playgroud)
我不想配置这个,而是与我的自定义Logger相关联的实例.我已经尝试了以下内容,但没有成功:
name.heikoseeberger.heikotron.java.util.logging.FileHandler.pattern = %h/heikotron.log
name.heikoseeberger.heikotron.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
Run Code Online (Sandbox Code Playgroud)
是否可以设置特定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);
//...
}
Run Code Online (Sandbox Code Playgroud)
因此,处理程序甚至没有考虑您放入文件中的配置。
在我看来,处理程序不知道任何特定记录器(即 n)的存在name.heikoseeberger.heikotro,他们只知道如何发布给定的 LogRecord。
据我所知,特定记录器的处理程序是由LogManager反射调用其默认构造函数来创建的,因此,当创建给定的处理程序时,它不知道它是为哪个特定记录器请求的,即这就是为什么它们的所有属性都是通过它们自己的类名而不是通过记录器的名称设置的。