【问题标题】:why is log4 appender member is null? cannot init log4j为什么 log4 appender 成员为空?无法初始化 log4j
【发布时间】:2023-04-07 12:17:02
【问题描述】:

我有这个log4j.properties 文件

# Root logger
log4j.rootLogger=INFO, sift
log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
log4j.configDebug = true

# Sift appender
log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
log4j.appender.sift.key=session_id
log4j.appender.sift.default=no_session_id
log4j.appender.sift.appender=org.apache.log4j.FileAppender
log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n
log4j.appender.sift.appender.file=/var/log/rr/$\\{session_id\\}.log
log4j.appender.sift.appender.append=true

但是当我尝试登录时得到 NPE

logger.error("example1");

我错过了如何使“apender”成员不为空?

这里是短 main 的堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.log4j.sift.MDCSiftingAppender.getAppender(MDCSiftingAppender.java:109)
    at org.apache.log4j.sift.MDCSiftingAppender.append(MDCSiftingAppender.java:79)
    at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
    at org.apache.log4j.Category.callAppenders(Category.java:206)
    at org.apache.log4j.Category.forcedLog(Category.java:391)
    at org.apache.log4j.Category.error(Category.java:305)
    at com.waze.rr_logger.SiftExampleLog4j.log(SiftExampleLog4j.java:14)
    at com.waze.rr_logger.SiftExampleLog4j.main(SiftExampleLog4j.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

主要:

public class SiftExampleLog4j {

    static org.apache.log4j.Logger logger = Logger.getLogger(SiftExampleLog4j.class);

    public void log() {
        BasicConfigurator.configure();
        org.apache.log4j.MDC.put("session_id","MyGooApp");

        logger.error("example1");

        org.apache.log4j.MDC.put("session_id","MyFooApp");

        logger.error("example2");
    }

    public static void main (String[] args){
    new SiftExampleLog4j().log();
    }
}

【问题讨论】:

  • 映射诊断上下文的代码是否比这更多???
  • 这就是我程序中的所有代码。你错过了什么?

标签: java apache logging log4j


【解决方案1】:

然后试试这个并删除那些 MDC 引用:

public class SiftExampleLog4j {

    static org.apache.log4j.Logger logger = Logger.getLogger(SiftExampleLog4j.class);

    public void log() {
        logger.error("example1");
        logger.error("example2");
    }

    public static void main (String[] args){
    new SiftExampleLog4j().log();
    }
}

然后尝试一次添加 MDC 位。我认为您需要为 MDC 添加更多代码。此外,它会引发异常,因此您需要一个 try/catch 处理程序。

【讨论】:

  • 它没有帮助。我想我在 log4j.properties 文件中遗漏了一些东西。我相信不是多余的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2021-06-13
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多