无论我的记录器设置为哪个级别,我都想记录一条消息,除非级别为 OFF。我的理解是以下内容会做到这一点。
logger.log(Level.ALL, <log message>);
但是这不起作用,除非我在配置文件中将我的根记录器级别设置为 all。我不想将记录器配置级别设置为全部,因为我不想调试,日志中的信息消息。
其他选项是写 logger.trace()
或 logger.fatal()
。然而,它们在语义上是错误的,因为它们会被标记为“TRACE”或“FATAL”。
所以,我的问题是 (1) 如何正确地做到这一点以及 (2) 在代码中使用 Level.ALL
的正确用例是什么?
答案 0 :(得分:0)
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
更重要吗?由您来为客户打电话吗?
(在这种情况下,“客户”可能是管理您的生产服务器的人。或者,如果您目前对此负责,他们可能是您的继任者:当您被众所周知的绿色打击时接管的人上班路上的公交车。)