当前位置: 首页 > 知识库问答 >
问题:

Log4J2日志级别优先级

云开诚
2023-03-14

我有log4j2.xml,它部分配置为:

<Loggers>
    <Root level="debug" includeLocation="true">
        <AppenderRef ref="FileInfo" level="info" />
        <AppenderRef ref="FileDebug" level="debug" />
    </Root>

    <Logger name="com.mycompany.domain.XYZ" level="TRACE" />
    <Logger name="com.mycompany.domain.ABC" level="TRACE" />
</Loggers>

但是,跟踪消息并不存在于两个文件附加符(fileinfo/filedebug)中。当我更改FileDebug log level=“TRACE”时,就会出现跟踪消息。

共有1个答案

宰父俊彦
2023-03-14

您应该花时间阅读关于log4j2体系结构的log4j2手册。特别是关于“loggerconfig”和“appender”的部分。

您描述的行为是由于您没有任何与com.mycompany.domain.xyzcom.mycompany.domain.abc记录器相关联的附加符,而且可加性的默认值是true

当消息到达com.mycompany...记录器之一并处于trace级别时,该消息将被记录器接受并发送到该记录器的所有附加程序--由于这些记录器没有附加程序,所以没有附加程序。

接下来,由于additivity默认为true,因此消息将转到记录器层次结构中下一个祖先的附录,在您的情况下,该祖先是root。根记录器的级别不影响消息是否被接受,因为它已经被子记录器接受。但是,该消息仍然不会出现在输出中,因为您设置了比trace更具体的附加器级别,所以附加器都拒绝该消息。

这让我想到你关于优先级的问题。答案是记录器的级别优先于追加器的级别。如果消息被记录器拒绝,它将永远不会到达该记录器的附加程序。如果消息被记录器接受,如果附加器的级别比消息级别更具体,那么它仍然可以被附加器拒绝。棘手的部分是,当可加性为true(默认情况下是这样)时,祖先记录器的附加符被当作子记录器的附加符来处理,正如我上面所解释的。

换句话说--因为trace是第二个最不具体的级别,所以您需要将记录器和附加器都设置为trace或更低的级别(例如all),以便看到这些消息出现在输出中。或者,您可以简单地将记录器设置为trace或更低的级别,而不在追加器上设置该级别。

 类似资料:
  • 我在spring应用程序中使用log4j2作为我的日志工具。我想为特定的库/包设置不同于根目录的日志级别。例如,我希望< code>org.springframework为INFO,而< code>com.google为WARN。我在< code>log4j2.properties中找到了这个: 我不明白是什么意思?我一直在log4j2文档中找到它,但没有解释那是什么或意味着什么。 如何为特定包添

  • 我的spring boot应用程序中有Log4j2,我希望将事件记录到2个日志文件中。用户服务无法创建信息级别的日志,但可以创建警告级别的日志。有人能指点一下吗? Log4j2.xml UserService.java

  • 根记录器配置为级别的同步记录器。我还有几个异步记录器。其中一个异步记录器配置在自定义的较高日志级别(789)。这高于级别(600)。 这样做的原因是有一个日志级别,可以用于通过异步记录器及其自己的附加程序记录的特殊事件。 我们不希望将事件发送给同步根记录器或其他记录器。。但仅限于异步记录器及其相应的附加程序。。可能吗?

  • 主要内容:如何设置日志级别?,日志级别如何工作?,Log4j 日志级别示例日志级别用于对日志文件中的信息进行分类。但是它们以非常具体的方式进行分类,即按紧急程度分类。该级别允许您管理以下类型的信息: 您可以在搜索过程中过滤您的日志文件。 您可以管理您记录的信息量。 系统中给出的信息量和类型以及事件日志由配置文件中的 log4j 日志级别设置控制。每条日志消息都以消息级别为前缀。 日志级别是org.apache.log4j.Level类的一个实例。 Log4j 具有以下级

  • 我已经将ApacheJena库包含到我的Java项目中,并且我正在使用ApacheLog4J2作为我的记录器。我还包括了用于从log4jv1映射的log4j-1.2-api和log4j-slf4j-impl依赖项。x和SLF4J(分别) 但是,我无法更改Jena的日志记录级别 我尝试在log4j2中设置它。xml(我在项目中使用的内容): 我甚至尝试添加一个log4j。属性文件: 没有成功 是否有

  • 我的MBean部署在JBoss上。jboss日志记录级别设置为'info'。现在,当我将我的包的日志级别(java util logger)更改为“fine”(通过设置日志级别以编程方式运行时)时,它不会追加任何logger.fine(“....”)的消息。信息被过滤掉了。 是否有任何方法可以将java util记录器日志级别的更改传播到jboss日志级别?(java util有不同的级别->SE