我有一个java.util.logging的问题。我告诉你。
我把我的程序放在一个jar文件中,当我运行它时,日志记录工作如我所希望的那样。在本例中,我在main方法中加载日志配置。
但是,如果我从一个不同的jar运行日志不与配置工作,但与日志默认配置。我以前没有设置日志记录配置。日志应用java.util.logging.FileHandler。模式,但它不应用java.util.logging.FileHandler.formatter类。在这个新jar中,我用ClassLoader加载其他jar。
配置文件为:
handlers = java.util.logging.FileHandler
.level = FINER
java.util.logging.FileHandler.level = FINER
java.util.logging.FileHandler.formatter = gx.util.logging.FormatoDesarrollo2
java.util.logging.FileHandler.pattern = log-client-%g.txt
java.util.logging.ConsoleHandler.level = FINER
java.util.logging.ConsoleHandler.formatter = gx.util.logging.FormatoDesarrollo2
gx.games.level=WARNING
那么,问题在哪里?
谢谢你,非常感谢。
在这个新jar中,我加载了其他jar,并添加了ClassLoader。
这似乎很可疑。你能在你的问题中包含代码吗?LogManager搜索系统类路径:
注意,在LogManager配置期间加载的所有类首先在系统类路径上搜索,然后再在任何用户类路径上搜索。这包括LogManager类、任何配置类和任何处理程序类。
尽管文档说它会搜索用户类路径,但它的处理程序或格式化程序不为真。需要注意的是:JDK-6878454 LogManager类加载与Java EE最佳实践不一致
由于您正在添加jar,请确保您的格式化程序位于系统类路径上。一种测试方法是添加以下内容:
Class.forName("gx.util.logging.FormatoDesarrollo2", true, ClassLoader.getSystemClassLoader());
如果抛出ClassNotFoundException,那么你的ClassLoader布局有问题。
如果是这种情况,您有两个选择:
- 将格式化程序放置在系统类路径上。
- 使用java.util.logging.config.class选项,因为它将回退到Thread::getContextClassLoader