如何在某些classe或包中禁用Logger?

时间:2013-12-08 12:19:49

标签: gwt logging

使用标准GWT记录器,是否可以在xml中禁用完整包的Log语句? 或者至少是个别班级?

在xml中,我可以使用;

禁用/终止所有日志记录
<set-property name="gwt.logging.enabled" value="TRUE"/>    

这似乎为所有包中的所有类设置了全局。是否可以在xml中有选择地执行此操作?

这里的指南; http://www.gwtproject.org/doc/latest/DevGuideLogging.html似乎只涵盖配置rootlogger,涵盖项目中的每个日志。我可能错过了显而易见的事,但我并没有“得到”如何有选择地应用它。

鉴于我的所有日​​志语句都已命名;

protected static Logger Log = Logger.getLogger("parent.childc");

似乎有可能选择性地打开/关闭它们。

谢谢, 托马斯

1 个答案:

答案 0 :(得分:0)

如果您已将所有记录器实例初始化为Logger.getLogger("Example"),则无法有选择地将其关闭和打开,因为它们都是一个名为“示例”的实例,所以我假设这不是实际上就是这样。

在大多数情况下,这是正常的JULI - 在JVM上工作的标准机制可以在这里工作。这在开发模式中是双重的,它实际上使用标准的java.util.logging.Logger实现。因此,如果您只是在dev模式下查找已清理的日志记录,请像处理其他任何记录器一样对待它 - 从根实例中找到要禁用/启用的包或类,并将日志级别设置为您想要的位置它。

在编译后的代码中,这种行为略有不同,您可能需要进行一些实验以确切了解具体方法,我现在不记得了。但是,您仍然可以使用LogManager,并且可以遍历所有现有的记录器,包:

LogManager manager = LogManager.getLogManager();
Enumeration<String> allLoggers = manager.getLoggerNames();
// for each String in the list, grab the logger via manager.getLogger

Logger.getLogger相对的优点是,这只会告诉您已经存在的记录器,而不是随时创建它们。这样你就可以有一个配置文件或url param来指定你希望看到哪些细节记录,并禁用其余的。

编辑:我运行了一个我再次制作的旧样本,看起来dev模式和prod模式之间的主要区别在于,在prod模式下,每个包都有一个记录器,顶部是root,特定的命名记录器作为'叶子节点',而在开发模式下,所有记录器似乎都直接放在根记录器中,没有中间包。如果您为特定包请求了一个记录器,那么它可能会生成一个,但我没有测试以找出它。