使用Java Logging API配置根记录器

8

我该如何在日志API中配置根记录器的行为?我不想单独配置每个记录器的行为,而是希望有一个单独的属性文件,可以设置所有记录器的行为,这样会非常方便。


为什么我无法通过getLogger("")访问根日志?之后,仍然只有主类中的日志产生输出。 - Sebastian Müller
3个回答

9

使用以下方法获取根日志记录器:

Logger system = Logger.getLogger("");

现在您可以像访问其他记录器一样访问根记录器。

在我的情况下,我希望它保持安静。我通过以下代码成功实现了这一点:

private static void setLevel(Logger pLogger, Level pLevel) {
    Handler[] handlers = pLogger.getHandlers(); 
    for (Handler h : handlers) {
        h.setLevel(pLevel);
    }
    pLogger.setLevel(pLevel);
}

...

setLevel(system, Level.OFF);

希望这有所帮助。

3
我猜你是指java.util.logging(JUL)实现:如果是这样,请查看Java Almanac的相关部分。 JUL配置的概述信息在此处。基本上,方法是为所有记录器使用单个配置文件。 更新:已删除Java Almanac的链接,因为它不再有效(链接失效),如jschoen的评论中所提到的。请使用Google查找替代信息源。

不知道是我运气不好还是怎么的,但你提供的Java Almanac链接似乎已经失效了。 - Jacob Schoen

-11

我建议直接使用Apache Commons Logginglog4j。它们更加方便和灵活。

编辑:

如果你想从属性文件配置日志,建议参考Vinay Sajip's answer。若要在程序中获取根记录器并使用API进行配置,则可以请求名为“”的记录器,就像这里所说here

private final static Logger logger = Logger.getLogger("");

5
为什么更加舒适?我已经使用日志API设置了所有内容,改变一切不太方便。 - Sebastian Müller
@Xelluloid:是的,你说得对,如果一开始就使用了log4j会更加方便。我不知道你已经做了这样的改变...我的错。 - Tim Büthe
1
这不起作用,正如我在我的问题下的评论中所提到的,似乎我无法通过“”访问根记录器。 - Sebastian Müller
1
哦,抱歉我犯了一个错误 =)现在它运行良好,感谢您。 - Sebastian Müller
12
问题提到了“使用 xyz 库”,如何实现“abc”... 你的回答却是“不要使用 xyz 库...哦,顺便说一下这个人说了什么”,这样做很无礼,也不建设性。这就好比有人说“我的Windows电脑有一个问题”,然后被问问题的人回答说“不要用Windows。你应该使用Linux(或Mac)”。请避免这种回答方式。 - Trevor Boyd Smith
只有当问题是“我正在使用java.util.logging,但不满意它。还有哪些类似的库可以使用?”时,才适合说“我建议直接使用Apache Commons Logging或log4j。它们更加舒适和灵活。” - Trevor Boyd Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接