Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未调用log4j自定义记录器方法_Java_Log4j - Fatal编程技术网

Java 未调用log4j自定义记录器方法

Java 未调用log4j自定义记录器方法,java,log4j,Java,Log4j,我想覆盖log4j.Logger类的错误(对象消息,Throwable t),以改变一些事情。 然而,当我扩展MYLogger extends Logger时,它仍然没有调用我的错误(..)方法的实现,而是调用了超类的方法 这是密码 public class MYLogger extends Logger { private static final String FQCN = MYLogger.class.getName(); protected MYLogger(Str

我想覆盖
log4j.Logger
类的
错误(对象消息,Throwable t)
,以改变一些事情。 然而,当我扩展MYLogger extends Logger时,它仍然没有调用我的错误(..)方法的实现,而是调用了超类的方法

这是密码

public class MYLogger extends Logger {

    private static final String FQCN = MYLogger.class.getName();


    protected MYLogger(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }


public void error(Object message, Throwable t,final String codeKey, final String messageKey) {
        System.out.println("codeKey "+codeKey+" messageKey"+messageKey);
        String fmessage=codeKey+":"+messageKey;

        if (this.repository.isDisabled(40000))
            return;
        if (Level.ERROR.isGreaterOrEqual(getEffectiveLevel()))
            forcedLog(FQCN, Level.ERROR, fmessage, null);
    }

}
和测试类,我试图从中调用我的错误实现(…)


我曾经遇到过这样的问题,我已经这样解决了:

public class MYLogger {

    private Logger  logger;

    public MYLogger(String name) throws IOException {
        logger = Logger.getLogger(name);                
    }

    public void error(String message){
        if (logger != null) 
            logger.error(message);
    }
}

我曾经遇到过这样的问题,我已经这样解决了:

public class MYLogger {

    private Logger  logger;

    public MYLogger(String name) throws IOException {
        logger = Logger.getLogger(name);                
    }

    public void error(String message){
        if (logger != null) 
            logger.error(message);
    }
}

您能否验证
getLogger
返回的运行时类型是否为
MYLogger
?该行/语句导致线程“main”java.lang.ExceptionInInitializerRor中出现以下异常异常,原因是:java.lang.ClassCastException:org.apache.log4j.Logger无法在test.TestLogger中转换为test.MYLogger。(TestLogger.java:9)就是这样。
getLogger
为您提供了一个
Logger
而不是
MYLogger
。不知道如何解决这个问题。我打赌log4j中一定有一些关于自定义Logger的教程。没有找到任何相关内容,请告诉我们您是否有一些建议。这可能会有所帮助:顺便问一下:我们谈论的是哪个版本的log4j?log4j或者log4j2?在后一种情况下,您可以阅读以下内容:能否验证
getLogger
返回的运行时类型是否为
MYLogger
?该行/语句在线程“main”中导致以下异常java.lang.ExceptionInInitializerError导致的错误:java.lang.ClassCastException:org.apache.log4j.Logger无法在test.TestLogger处强制转换为test.MYLogger。(TestLogger.java:9)就是这样。
getLogger
为您提供了一个
Logger
而不是
MYLogger
。不知道如何解决这个问题。我打赌log4j中一定有一些关于自定义Logger的教程。没有找到任何相关内容,请告诉我们您是否有一些建议。这可能会有所帮助:顺便问一下:我们谈论的是哪个版本的log4j?log4j或者log4j2?在后一种情况下,您可以阅读以下内容:这基本上是包装记录器,这是可以完成的,但这意味着我需要让开发人员获取MyLogger实例进行错误记录,或者让Logger进行调试,这不是一个好主意,或者我需要将所有方法从Logger复制到MyLogger。这基本上是包装记录器,可以通过这意味着我需要让开发人员获取MyLogger的实例来记录错误,让Logger进行调试,这不是一个好主意,或者我需要将所有方法从Logger复制到MyLogger。