如何解决java util日志记录属性中何时需要“.level”?
我见过以多种方式配置的 java util 日志记录。通常,完全限定的类名用于记录器名称。在相应的 logging.properties 文件中,我已经看到以几种不同的方式在包级别或类级别配置日志级别。例如,将 com.example.MyClass
的日志级别设置为 FINE:
- com.example.level = FINE
- com.example.* = FINE
- com.example.MyClass = FINE
- com.example.MyClass.level = FINE
这四个变体都有效吗(假设它们在文件后面没有被覆盖)?
是否有任何选项比其他选项“更正确”?
java.util.logging 是否只是假设 .level
不存在?
我尝试找到有关此配置文件的权威指南,但在 https://docs.oracle.com/javase/8/docs/technotes/guides/logging/overview.html#a1.8 似乎没有具体说明。
解决方法
这四个变体都有效吗(假设它们在文件后面没有被覆盖)?
我见过的大多数在线教程都使用明确的 .level 后缀...这是首选(以及为什么)?
在标准 LogManager 下,com.example.* = FINE
和 com.example.MyClass = FINE
不会改变级别。键必须以 .level
结尾才能更改级别。
根据 LogManager 文档:
名称以“.level”结尾的所有属性都假定为记录器定义日志级别。因此,“foo.level”为名为“foo”的记录器定义了一个日志级别,并(递归地)为其命名层次结构中的任何子级定义了日志级别。日志级别按它们在属性文件中定义的顺序应用。因此,树中子节点的级别设置应该在其父节点的设置之后。属性名称“.level”可用于设置树根的级别。
如果您使用的是 LogManager 的子类,则需要查阅该文档以验证语法。
如果 java.util.logging 不存在,它是否只是假设 .level?
根据文档,它没有。如果您声明的内容没有 .level,则它只会被视为 LogManager entry。
是否有任何选项比其他选项“更正确”?
LogManager 属性文件 can't create loggers。这意味着您的日志文件必须与代码创建记录器的方式相匹配。例如,如果您的文件使用 com.example.level = FINE
而您的代码使用 com.example.MyClass1
和 com.example.MyClass2
作为记录器名称,您将永远不会看到 MyClass1 或 MyClass2 切换到 FINE,因为 the code never created package parent logger。 Root 是所有命名记录器的父级,因此这是一次更改多个记录器的理想方式。如果您需要做一些非常复杂的事情,那么您可以使用 LogManager 支持的 config
选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。