Java日志配置文件允许我定义命名记录器的属性。
name.heikoseeberger.heikotron.level = FINE
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler到现在为止还好。现在,我想将配置为特定的 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我不想配置这个,但是与我的自定义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实例的属性?如有,应如何识别/命名?
发布于 2013-08-01 15:51:38
这是通过使用在config的顶级类文档中描述的LogManger选项来完成的。使用公共构造函数创建一个公共命名类,并调用配置处理程序所需的所有java调用。然后,在日志属性中,指示LogManager加载您创建的类以配置处理程序。否则,可以对文件处理程序进行子类,该处理程序将创建要配置的自定义命名空间。
发布于 2012-05-11 04:37:14
我认为是不可能的。如果您查看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);
//...
}因此,您要放入文件中的配置甚至没有被Handler考虑。
在我看来,处理程序似乎不知道任何特定的记录器(即name.heikoseeberger.heikotron)的存在,他们只是知道如何发布给定的LogRecord。
据我所见,特定记录器的处理程序是由LogManager创建的,通过反射调用它们的默认构造函数,因此,当创建给定的处理程序时,它不知道请求了哪个特定的记录器,这就是为什么它们的所有属性都是通过自己的类名而不是通过记录器的名称来设置的。
发布于 2012-05-28 10:42:14
如果我理解得对,那么您正在尝试使用java.util.logging包编写不同的日志文件。如果不扩展它,就不能开箱即用。
如果不能切换到另一个日志框架(如Logback ),请检查java logging.properties:如何登录到两个不同的文件的答案,看看它是否适合您的需要。
https://stackoverflow.com/questions/10532291
复制相似问题