我正在使用内部使用Apache CXF的SDK .Apache CXF java.util.logging默认使用该程序包进行日志记录.
我想将日志记录级别更改INFO为WARNING或完全关闭它.我可以在我的应用程序的主要方法中以编程方式执行此操作吗?
有一种方法可以通过编程来完成此操作,但它并不直观。如果您最终需要更精细的级别或多个类的控制,则更改为 SLF4J 或 Log4J 可能会更好
问题在于 Loggers 使用 WeakReferences 进行缓存。从你打电话的那一刻起Logger.setLevel()到Logger被实际使用,它可能会被GC。因此,记录日志的 Logger 不是您设置级别的 Logger!在启动时有大量 GC 的框架中尤其如此。
解决方案是以编程方式设置配置,而不是实际的记录器。
String logConfig = ".level=" + java.util.logging.Level.INFO + '\n';
logConfig += "handlers=java.util.logging.ConsoleHandler\n";
// ensure ConsoleHandler does not filter
logConfig += "java.util.logging.ConsoleHandler" + ".level=" + java.util.logging.Level.FINEST + '\n';
//set your custom levels
logConfig += "org.apache.cxf" + ".level=" + java.util.logging.Level.WARNING + "\n";
try {
java.util.logging.LogManager.getLogManager().readConfiguration(new java.io.ByteArrayInputStream(logConfig.getBytes("UTF-8")));
// no need to close ByteArrayInputStream -- it is a no-op
}
catch (IOException ioe) {
System.err.println("cannot fully configure logging");
ioe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
请注意,此方法存在一些问题:
-Djava.util.logging.config.file,它也会被覆盖。\n。main(). 如果这是不可能的,您可能还需要迭代所有现有的记录器并使用setLevel()也更新它们的配置。| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |