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

Maven应用调用Log4j2依赖Jar后主日志混入依赖日志文件求助

解决Log4j2多配置文件导致日志重复输出到依赖Jar日志文件的问题

问题原因

Log4j 2会自动加载classpath下所有的log4j2配置文件,你的主应用和依赖Jar中都存在log4j2.properties,这些配置会被合并生效。由于两个配置里的appender、logger名称完全一致(比如都叫LogToRollingFile、logger.app),合并后rootLogger会同时关联两个RollingFile appender,最终导致主应用的日志既输出到自己的文件,也输出到依赖Jar指定的文件中。


解决方案

方案1:移除依赖Jar中的log4j2配置(推荐)

作为依赖库,不应该自带日志配置,日志规则应由主应用统一管理。直接删除依赖Jar里的log4j2.properties文件,或者在打包依赖Jar时排除该文件。这样主应用的配置会完全生效,依赖Jar的日志会遵循主应用的输出规则。

方案2:修改依赖Jar的配置,避免名称冲突

如果必须保留依赖Jar的独立日志配置,修改其log4j2.properties中的关键名称,避免和主应用重复:

  • 修改appender名称:将appender.rolling.name改为LogToRollingFile_Dependency,控制台appender同理改为LogToConsole_Dependency
  • 修改logger名称:将logger.app.name改为依赖Jar专属的包路径(不要和主应用的com.indra重复),或者重命名logger节点
  • 更新所有appender引用:将logger和rootLogger的appenderRef指向新的名称

修改后的依赖Jar配置示例:

status = warn

appender.console.type = Console
appender.console.name = LogToConsole_Dependency
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %5p | %d | %t | %F | %L | %m%n

# Rotate log file
appender.rolling.type = RollingFile
appender.rolling.name = LogToRollingFile_Dependency
appender.rolling.fileName = C:/LOG2/dependency.log
appender.rolling.filePattern = C:/LOG2/dependency.log.%d{yyyy-MM-dd}
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %5p | %d | %t | %F | %L | %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.strategy.type = DefaultRolloverStrategy

# Log to console and rolling file
logger.dependency.name = com.indra.dependency # 替换为依赖Jar实际的包名
logger.dependency.level = info
logger.dependency.appenderRef.rolling.ref = LogToRollingFile_Dependency
logger.dependency.appenderRef.console.ref = LogToConsole_Dependency
logger.dependency.additivity=false

rootLogger.level = debug
rootLogger.appenderRef.rolling.ref = LogToRollingFile_Dependency

方案3:主应用中排除依赖Jar的配置文件

在Maven的pom.xml中,通过插件过滤掉依赖Jar里的log4j2.properties,确保只有主应用的配置生效:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>依赖Jar的groupId</groupId>
                                <artifactId>依赖Jar的artifactId</artifactId>
                                <version>依赖Jar版本号</version>
                                <excludes>**/log4j2.properties</excludes>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:12:17