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

Log4j2自定义Logger级别与Appender配置未生效问题排查

Log4j2日志级别与Appender未按预期工作问题

项目结构

项目结构

代码文件

Main.java

package com.my.sample.MySampleProject;

import org.apache.logging.log4j.Logger;
import com.my.sample.package2.MyPackage2Class;
import org.apache.logging.log4j.LogManager;

public class Main {

    private static Logger logger = LogManager.getLogger(Main.class);

    public static void main(String[] args) {
        logger.debug("Debug log message");
        logger.info("Info log message");
        logger.error("Error log message");
        
        MyPackage2Class classPack2 = new MyPackage2Class();
        classPack2.printStatement();

    }
} 

MyPackage2Class.java

package com.my.sample.package2;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyPackage2Class {
    
    private static Logger logger = LogManager.getLogger("MyLoggerPackage2");
    
    public void printStatement() {
        logger.debug("Package2 Debug log message");
        logger.info("Package2 Info log message");
        logger.error("Package2 Error log message");
    }
}

log4j2.properties原配置

# Direct log messages to STDOUT
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

# Direct to a file
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName = sample/logs/log4j2.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n


log4j.logger.MyLoggerPackage2=ERROR, STDOUT
log4j.additivity.MyLoggerPackage2=false

# Root Logger
rootLogger=INFO, STDOUT, LOGFILE

预期与实际结果

预期逻辑

  • 根日志级别设为INFO,关联STDOUT和LOGFILE Appender
  • 自定义Logger「MyLoggerPackage2」级别设为ERROR,仅关联STDOUT且additivity设为false,预期仅控制台输出该Logger的ERROR级别日志

实际输出

控制台与日志文件输出一致:

[INFO ] 2024-06-19 11:19:12.769 [main] Main - Info log message
[ERROR] 2024-06-19 11:19:12.772 [main] Main - Error log message
[INFO ] 2024-06-19 11:19:12.779 [main] MyLoggerPackage2 - Package2 Info log message
[ERROR] 2024-06-19 11:19:12.779 [main] MyLoggerPackage2 - Package2 Error log message

问题原因与解决方案

核心问题

你使用了Log4j 1.x的配置语法来配置Log4j2,而Log4j2的properties配置格式完全不同,导致自定义Logger的配置根本没有被加载生效。

Log4j2不识别log4j.logger.xxx和log4j.additivity.xxx这类旧语法,所以MyLoggerPackage2实际上没有被正确配置,它的日志会默认继承RootLogger的规则:级别INFO,同时输出到STDOUT和LOGFILE。

正确的配置写法

将自定义Logger的配置替换为Log4j2标准的properties语法:

# 配置自定义Logger MyLoggerPackage2
logger.package2.name = MyLoggerPackage2
logger.package2.level = ERROR
logger.package2.appenderRefs = stdout
logger.package2.appenderRef.stdout.ref = STDOUT
logger.package2.additivity = false

修改后的完整log4j2.properties

# Direct log messages to STDOUT
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

# Direct to a file
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName = sample/logs/log4j2.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

# 自定义Logger配置(Log4j2标准语法)
logger.package2.name = MyLoggerPackage2
logger.package2.level = ERROR
logger.package2.appenderRefs = stdout
logger.package2.appenderRef.stdout.ref = STDOUT
logger.package2.additivity = false

# Root Logger
rootLogger=INFO, STDOUT, LOGFILE

解释

  • logger.package2.name:定义Logger的名称,对应代码里的MyLoggerPackage2
  • logger.package2.level:设置该Logger的日志级别为ERROR
  • logger.package2.appenderRefs:指定关联的Appender集合(这里只关联stdout)
  • logger.package2.appenderRef.stdout.ref:关联到名称为STDOUT的Appender
  • logger.package2.additivity = false:禁止日志传递到父Logger(即RootLogger),避免重复输出到LOGFILE

修改后,MyLoggerPackage2的INFO级别日志会被过滤,仅ERROR级别日志输出到控制台,不会写入日志文件,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:53:16