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

Logback为何读取类名而非自定义Logger名称?SIFT无法生成对应日志文件

问题原因及排查方向

这问题大概率是Logger初始化逻辑错误或者配置/绑定异常导致的,具体可以从这几个方向排查:

  • 枚举类的Logger初始化错误
    检查你的LogManager枚举实现,确保每个枚举实例是通过LoggerFactory.getLogger(自定义名称)来初始化的,而不是传入枚举类或调用类的Class对象。比如错误写法:

    // 错误:返回的是枚举类的全限定名
    this.logger = LoggerFactory.getLogger(LogManager.class);
    

    正确写法应该是:

    LogManager(String loggerName) {
        this.logger = LoggerFactory.getLogger(loggerName);
    }
    

    如果你在这里传错了参数,Logger的名称自然会变成类的全限定名,而非你定义的"console"、"client"。

  • SLF4J绑定冲突
    检查项目依赖,确保只有Logback这一种SLF4J实现绑定。如果同时存在log4j-over-slf4j、slf4j-log4j12这类依赖,会导致SLF4J的LoggerFactory行为异常,可能返回不符合预期的Logger实例。可以通过mvn dependency:tree(Maven)或./gradlew dependencies(Gradle)查看依赖树,排除冲突的绑定依赖。

  • 调用Logger时的封装错误
    确认业务代码中调用Logger的方式是直接使用LogManager枚举返回的实例,而非在中间封装层重新通过LoggerFactory.getLogger(当前类.class)获取Logger。比如如果有工具类封装了日志输出,但内部又重新获取了基于调用类的Logger,那最终输出的日志事件里的Logger名称还是调用类的全限定名。

  • 自定义鉴别器逻辑错误
    检查你的自定义鉴别器代码,确保getDiscriminatingValue方法返回的是event.getLoggerName(),而不是调用者的类名(比如通过event.getCallerData()获取的类名)。错误的鉴别器逻辑会导致你拿到的不是Logger的名称,而是调用类的全限定名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:48:12