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

log4j2:在运行时重新配置记录器的问题

徐栋
2023-03-14

这与log4j2版本2.13.2有关。

以下是一系列简短的事件--

  1. 应用程序启动,并从类路径加载log4j2.xml.
  2. 应用程序按预期进行适当的日志记录。
  3. 第一次API调用发生。在内部加载log4j2_api.xml,并根据其配置进行API日志记录。
  4. 应用程序从API接收所需的数据并继续进行,但没有所需的日志记录。

我在这里的描述是--如果在新的配置中发现了预先加载的(由初始配置)记录器/追加器,它们应该被更新,其他的应该保持不变。当然,应该添加新配置的记录器/追加器。

<Configuration status="warn">
    <Appenders>
        <RollingFile name="applicationAppender" fileName="sample-log-executor-2008.log" filePattern="sample-log-executor-2008-%i.log">      
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            
            <Policies>
                <SizeBasedTriggeringPolicy size="5 MB" />
            </Policies>
        </RollingFile>
        
        <Console name="console_window" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    
    <Loggers>
        <Logger name="com.abc.samplecode" level="trace" additivity="false">
            <appender-ref ref="applicationAppender" level="trace" />
        </Logger>

        <Root level="error" additivity="false">
            <appender-ref ref="console_window" />
        </Root>
    </Loggers>
</Configuration>

log4j_api.xml

<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                pattern="%d %-5p [%t] %C (%F:%L) - %m%n" />
        </Console>
        
        <RollingFile name="xyzAPIAppender" fileName="xyzAPILog.log"
            filePattern="xyzAPILog-%i.log">
            <PatternLayout
                pattern="%d{MMM dd yyyy HH:mm:ss.SSS} %-5p [%t] (%27F:%-5L) - %m%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="5 MB" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>
    
    <Loggers>
        <logger name="com.xyz.api" level="warn"
            additivity="false">
            <AppenderRef ref="xyzAPIAppender" />
        </logger>
    </Loggers>
</Configuration>

共有1个答案

秦弘亮
2023-03-14

我怀疑您的类路径中缺少log4j2核心jar。

有关详细信息,请参阅arch http://logging.apache.org/log4j/2.x/faq.html#which_jars

 类似资料:
  • 由此我从NetBeans得到以下错误消息: 所有异常消息都写入控制台,包括用户日志的消息。所以我知道两个伐木工都在工作。记录器附加器写入文件OK。userLog记录器不会创建任何文件,它使用几乎相同的附加器。 看来我还没有正确地命名一些东西来允许log4j2找到记录器。我试过各种命名的组合来弄对它,但我搞不清问题出在哪里。 我必须在每个类的记录器初始化中包含类名吗? 编辑:我需要包含包名。我花了一

  • 问题内容: 我们在项目中使用LogBack,我想根据一些数据库值配置logger,即如果某个DB值设置为true,则logger应该同时使用文件和数据库附加程序,如果为false,则logger必须仅使用DB附加程序, 我也想保留使用静态最终记录器,因此不会在每次调用记录器时都创建一个新实例, 那我该怎么做呢? 问候, 问题答案: 您应该按照本示例中的说明以编程方式配置Logback 。

  • 我想让一些记录器异步在log4j2.properties文件。在xml格式中,您可以添加为 我在log4j2中试过了。作为记录器的属性=com foo Bar 但这种语法似乎是错误的。 正确的配置方法是什么?

  • 是的,我已经阅读了所有相关的问题。我正在使用log4j2(尝试了2.4版和更新到最新的2.6.2版)。 我有一个面向客户的小型实用程序。我渴望将暴露的配置保持在最低限度。但对于有问题的情况,我还想添加一个标志,以便在运行时启用调试日志。 这是我启用调试日志记录的代码 但它实际上并不适用于这些情况: 实用程序通常在30秒内完成,因此更改应该是即时的。这是log4j2。xml 使用AppenderRe

  • 我正在使用log4j在我的一个应用程序上做一些日志记录。我的配置文件中的日志记录程序如下所示。 基本上,我希望从我写的代码中获得“信息”级别的消息,但是我希望外部库只在有警告或更可怕的情况下记录。 这正如我所期望的那样工作,但是在“org.eclipse.jetty”下有很多类 有可能这样做吗? 也就是说,我希望整个包中的所有内容都只警告/错误/致命。 我试了上述方法,但没有效果。是否有一个“通配

  • 我找了很长时间,所以在标记为重复之前,请务必阅读。 我有一个函数(),它是用一个参数调用的。我想将该id作为前缀添加到每个日志消息中。每次调用函数时,它都会更改。因此,我想更新记录器模式,将此id添加为前缀。 我读过: 如何配置 如何重新配置 SO和log4j论坛上的许多帖子都在讨论如何在运行时更改配置。它们要么过时,要么根本不起作用。 以下代码基于 log4j2 文档。它打印: 如果我注释掉行然