java.util.logging 不适用格式化程序



我有一个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布局有问题。

如果是这种情况,您有两个选择:

  1. 将格式化程序放置在系统类路径上。
  2. 使用java.util.logging.config.class选项,因为它将回退到Thread::getContextClassLoader

最新更新