微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何独立于设置的日志级别在 log4j2 中记录消息

如何解决如何独立于设置的日志级别在 log4j2 中记录消息

无论我的记录器设置为哪个级别,我都想记录一条消息,除非级别为 OFF。我的理解是以下内容会做到这一点。

logger.log(Level.ALL,<log message>);

但是这不起作用,除非我在配置文件中将我的根记录器级别设置为 all。我不想将记录器配置级别设置为全部,因为我不想调试,日志中的信息消息。

其他选项是写 logger.trace()logger.fatal()。然而,它们在语义上是错误的,因为它们会被标记为“TRACE”或“FATAL”。

所以,我的问题是 (1) 如何正确地做到这一点以及 (2) 在代码中使用 Level.ALL 的正确用例是什么?

解决方法

Level.ALL 不能用作单个日志事件的级别。它只能在过滤事件时使用。 (它的实际值是 Integer.MAX_VALUE,表示比 TRACE (600) 级别。)

Log4j2 允许您定义自定义日志级别;见https://logging.apache.org/log4j/2.x/manual/customloglevels.html

所以你可以做的是定义一个比FATAL (100) 更高级别的日志级别:

 final Level UNSUPPRESSABLE = Level.forName("UNSUPPRESSABLE",1);

默认情况下,级别名称是日志格式化程序输出的名称,但您可以配置模式以输出不同的内容。请参阅 %level 模式的规范。


然而......我认为在应用程序中做这种事情是一个坏主意。这是意料之外的。它还剥夺了客户控制日志记录的能力。对于客户来说,这些事件真的FATAL更重要吗?由您来为客户打电话吗?

(在这种情况下,“客户”可能是管理您的生产服务器的人。或者,如果您目前对此负责,他们可能是您的继任者:当您被众所周知的绿色打击时接管的人上班路上的公交车。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。