log4j 日志记录层次结构顺序

Posted

技术标签:

【中文标题】log4j 日志记录层次结构顺序【英文标题】:log4j logging hierarchy order 【发布时间】:2011-12-06 10:47:01 【问题描述】:

log4j 日志的层次结构是什么?

DEBUG
INFO
WARN
ERROR
FATAL

哪一个提供了最高的日志记录,有助于解决问题? 任何人都可以提供从最高到最低进行日志记录的顺序或层次结构吗? 谢谢!

【问题讨论】:

【参考方案1】:

此表可能对您有所帮助:

在第一列中,您将看到日志在每个级别中的工作方式。即对于 WARN,(FATAL、ERROR 和 WARN)将可见。对于OFF,什么都不会可见。

【讨论】:

术语 visibilityitem 不是自解释的。我看到官方文档对此也很模糊。记录器的输出方法如errorinfodebug 等为记录消息分配优先级/严重性级别。日志记录是否真正生效(消息将可见)取决于正在使用的记录器的有效日志记录级别。 链接已损坏。请修复或删除 虽然这回答了这个问题(这只是要求“层次顺序”),但我最终还是因为你糟糕的术语而投了反对票:going down, “visibility” works 项目。您不想解释记录器配置如何影响实际记录(传递日志事件)吗? 考虑另一个更新。顺便说一句:official documentation(本节末尾)中的表格在处理OFFALL 方面有所不同,好吧,在阅读了一些资料之后(没有找到特殊情况),我怀疑他们的表格是否正确。 谢谢 Wolf,我已经根据你的 cmets 更新了答案。 我认为这是日志级别和预期日志消息类型的出色可视化,将为特定的日志级别设置输出。我唯一的建议可能是使用交替的行颜色来指导查看者图表应该按行而不是按列来解释。 (即行代表记录器级别,列代表将出现的日志消息类型)【参考方案2】:

使用武力,阅读源码(摘自编译的PriorityLevel类,TRACE级别在1.2.12版本中引入):

public final static int OFF_INT = Integer.MAX_VALUE;
public final static int FATAL_INT = 50000;
public final static int ERROR_INT = 40000;
public final static int WARN_INT  = 30000;
public final static int INFO_INT  = 20000;
public final static int DEBUG_INT = 10000;
public static final int TRACE_INT = 5000; 
public final static int ALL_INT = Integer.MIN_VALUE; 

或log4j API for the Level class,这很清楚。

当库决定是否打印某个语句时,它会计算负责的Logger 对象的有效级别(基于配置)并将其与LogEvent 的级别进行比较(取决于哪个方法)在代码中使用 - trace/debug/.../fatal)。如果LogEvent 的级别大于或等于Logger 的级别,则LogEvent 被发送到附加程序——“打印”。归根结底,这一切都归结为整数比较,这就是这些常量发挥作用的地方。

【讨论】:

【参考方案3】:
OFF
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
ALL

【讨论】:

检查整数变量的代码以证明docjar.com/html/api/org/apache/log4j/Level.java.html 在你的链接上说“ALL 维恩图 OFF() ALL(TRACE(DEBUG(INFO(WARN(ERROR(FATAL)))))) @Mike on log4j Logging Levels 他们使用第一个表中的字母顺序。除了缺少trace,他们后来正确地指出ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF(其中<意味着不太重要)【参考方案4】:

log4j 日志级别的层次结构按从高到低的顺序如下:

追踪 调试 信息 警告 错误 致命的 关闭

TRACE 日志级别提供最高的日志记录,有助于解决问题。 DEBUG 日志级别对于解决问题也非常有用。

您还可以参考此链接了解有关日志级别的更多信息: https://logging.apache.org/log4j/2.0/manual/architecture.html

【讨论】:

【参考方案5】:

[取自http://javarevisited.blogspot.com/2011/05/top-10-tips-on-logging-in-java.html]

DEBUG 是最低限制的 java 日志记录级别,我们应该编写调试应用程序所需的所有内容,这种 java 日志记录模式只能用于开发和测试环境,不得用于生产环境。

INFO 比 DEBUG java 日志级别更受限制,我们应该在 Java 中的 INFO 级别日志中记录信息性消息,例如服务器已启动、传入消息、传出消息等。

WARN 比 INFO java 日志级别更受限制,用于记录警告类型的消息,例如客户端和服务器之间的连接丢失。数据库连接丢失,Socket 达到极限。这些消息和 java 日志级别几乎很重要,因为您可以在 java 中对这些日志消息设置警报,并让您的支持团队监控您的 java 应用程序的运行状况并对这些警告消息做出反应。总之,WARN 级别用于记录 Java 登录的警告消息。

ERROR 是比 WARN 更受限制的 java 日志级别,用于记录错误和异常,您还可以在此 java 日志级别上设置警报,并警报监控团队对此消息做出反应。 ERROR 对于 Java 登录很严重,您应该始终打印它。

FATAL java 日志级别指定了可能导致应用程序中止的非常严重的错误事件。在此之后,您的应用程序通常会崩溃并停止。

OFF Java 日志记录级别具有***别,旨在关闭 Java 日志记录。

【讨论】:

【参考方案6】:

层次顺序

    全部 追踪 调试 信息 警告 错误 致命 关闭

【讨论】:

【参考方案7】:

为了清楚起见,log4j 中没有像“层次结构”这样的定义术语。 是的,有不同的层次。对于故障排除,您必须选择您想要的日志级别。

【讨论】:

【参考方案8】:

我觉得“日志级别”这个词有点混乱,所以我更喜欢这样想:

事件有一个SEVERITY(一个级别)。在 log4j 中,这被建模为整数。 Lo​​gger 有一个 THRESHOLD(又名 LoggerConfig 级别,用于过滤事件)

按照惯例,log4j 定义了一些Standard Log Levels。在 v2.x 中,这些是(按严重程度递减的顺序): OFFFATALERRORWARNINFODEBUGTRACEALL。请注意,OFFALL 仅用作记录器阈值,而不是事件严重性级别)。您还可以添加自己的自定义级别,并为其分配一个数值。

Logger 将忽略严重程度低于其阈值的任何事件:

OFF 的阈值表示没有日志记录。 FATAL 的阈值表示仅记录 FATAL 事件(或更糟)。 ERROR 的阈值表示仅记录 ERROR、FATAL(或更糟)。 WARN 的阈值表示仅记录 WARN、ERROR、FATAL(或更糟)。 等等... ALL 的阈值表示记录所有事件(最详细的选项)

作为图表(基于in the log4j v2.x docs 显示的表格),它看起来像这样:

【讨论】:

【参考方案9】:

跟踪 --> 调试--> 信息 --> 警告 --> 错误 --> 致命

如果日志级别设置为 WARN。它将记录所有 WARN 及其下方的所有级别。(错误和致命)。 如果为 TRACE 设置了日志级别。它将记录所有 TRACE 及其下方的所有级别。(DEBUG、INFO、WARN、ERROR、FATAL)。

【讨论】:

以上是关于log4j 日志记录层次结构顺序的主要内容,如果未能解决你的问题,请参考以下文章

Log4J2 详细介绍

log4j日志基本配置

Log4j日志记录

学习笔记开源日志记录工具log4j使用方法

日志插件

使用log4j记录日志