-2

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

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


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

(在这种情况下,“客户”可能是管理您的生产服务器的人。或者,如果您目前对此负责,他们可能是您的继任者:当您在上班的方式。)

于 2021-06-26T00:56:44.327 回答