You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j从2.23.0升级到2.23.1后出现异常日志与类缺失问题求助

问题

将Log4j依赖从2.23.0版本升级到2.23.1后,遇到两个问题:

  • 额外TRACE日志:出现Log4j2-TF-3-Scheduled-1 TRACE WatchRunnable run triggered.等日志,即使设置-Dlog4j2.debug=false等Java参数禁用该类日志,回退到2.23.0版本则无此问题;
  • JndiLookup类缺失错误:日志中出现org.apache.logging.log4j.core.lookup.JndiLookup类找不到的异常,尽管未使用JNDI查找且已配置{nolookups},回退版本后错误消失。

当前Maven依赖配置:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.23.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.23.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.23.1</version>
</dependency>

log4j.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration strict="true" monitorInterval="30">
    <Properties>
        <Property name="logPattern">%date{ISO8601_OFFSET_DATE_TIME_HHMM} [%-5level] [%logger] %message{nolookups}%n</Property>
    </Properties>

    <Appenders>
        <!-- Simple console logger -->
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${logPattern}"/>
        </Console>

        <RollingFile name="myAppender"
                     fileName="app.log"
                     filePattern="app-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <OnStartupTriggeringPolicy />
                <TimeBasedTriggeringPolicy modulate="true" />
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <DefaultRolloverStrategy min="1" max="1">
                <Delete maxDepth="1">
                    <IfFileName glob="app-*.log" />
                    <IfLastModified age="1d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="myAppender"/>
        </Root>
    </Loggers>
</Configuration>

请问这两个问题是Log4j的bug,还是需要额外的配置或依赖?


分析与解决方案

1. 额外TRACE日志问题

这不是bug,是Log4j 2.23.1对配置文件监控线程的日志级别调整导致的。WatchRunnable属于org.apache.logging.log4j.core.config包下的类,-Dlog4j2.debug=false控制的是Log4j自身调试日志,和该线程的日志不属于同一控制维度。

解决方法:在log4j.xml的<Loggers>节点下新增日志器,明确关闭该类的TRACE日志:

<Loggers>
    <!-- 关闭配置监控线程的TRACE日志 -->
    <Logger name="org.apache.logging.log4j.core.config.WatchRunnable" level="OFF"/>
    <Root level="INFO">
        <AppenderRef ref="myAppender"/>
    </Root>
</Loggers>

2. JndiLookup类缺失问题

这是Log4j版本变更导致的:从2.17.0版本开始,JndiLookup类被从log4j-core中移除,单独拆分到log4j-core-jndi依赖包中。即使配置了{nolookups},Log4j启动时仍会尝试加载所有默认Lookup实现类,找不到则抛出异常。

解决方法有两种:

  • 若完全不需要JNDI功能,直接添加JVM参数-Dlog4j2.formatMsgNoLookups=true,彻底禁用所有Lookup功能,避免Log4j尝试加载JndiLookup类;
  • 若确实需要JNDI功能,可添加对应版本的log4j-core-jndi依赖,但不推荐无需求时添加。

内容的提问来源于stack exchange,提问作者bcoveny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:45