java - 类转换异常 : Extending Log4j Logger

标签 java inheritance

我想出于特殊目的扩展 Log4j Logger。这是我写的类(class):

package com.edfx.adb.common.logger;

import javax.faces.application.ProjectStage;
import javax.faces.context.FacesContext;

import org.apache.log4j.LogManager;

public final class Logger extends org.apache.log4j.Logger {

    protected Logger(String name) {
        super(name);
    }

    public static org.apache.log4j.Logger getLogger(String name) {
        return LogManager.getLogger(name);
    }

    @Override
    public void debug(Object message) {
        if (isDebugEnable()) {
            super.debug(message);
        }
    }

    @Override
    public void debug(Object message, Throwable throwable) {
        if (isDebugEnable()) {
            super.debug(message, throwable);
        }
    }

    private boolean isDebugEnable() {
        return FacesContext.getCurrentInstance().isProjectStage(ProjectStage.Development);
    }
}

我将其称为:

protected final Logger log = (Logger) Logger.getLogger(getClass());

但是我遇到了异常:

Caused by: java.lang.ClassCastException: org.jboss.logmanager.log4j.BridgeLogger cannot be cast to com.edfx.adb.common.logger.Logger
        at com.edfx.adb.web.controller.BaseWebController.<init>(BaseWebController.java:18) [classes:]
        at com.edfx.adb.web.controller.AuthController.<init>(AuthController.java:27) [classes:]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_09]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_09]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_09]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [rt.jar:1.7.0_09]
        at java.lang.Class.newInstance0(Class.java:372) [rt.jar:1.7.0_09]
        at java.lang.Class.newInstance(Class.java:325) [rt.jar:1.7.0_09]
        at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188) [jsf-impl-2.1.7-jbossorg-2.jar:]

最佳答案

我不明白您为什么要尝试扩展 Logger,请尝试扩展 AppenderSkeleton,这确实是完成所有工作的原因。然后将该 Appender 添加到您的配置中

public class MyAppender extends AppenderSkeleton {
    ...
}

然后添加您的配置:

log4j.rootLogger=MyApp
log4j.appender.MyApp=com.mypackage.MyAppender

我自己尝试过,效果非常好。

关于java - 类转换异常 : Extending Log4j Logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789992/

相关文章:

java - Android - 检索存储在 Cloud Firestore 文档中的自定义对象

inheritance - 我怎样才能在 Perl 6 中重新启用一个对象?

ios - objective-c : how to inherit category methods loaded in a parent class?

java - 将父类(super class)对象作为参数传递给子类构造函数(java)

java - 减少频繁重新部署(上传)到远程服务器的 war 规模

java - 在简单的 spring boot crud api 上创建用户的问题

java - 如何正确返回从类扩展并实现接口(interface)的东西?

java - 如何在 jFrame 中隐藏 jTable

JavaScript - 构造函数中的继承

C#:引发继承事件