log4j自定义appender不产生任何输出

时间:2012-07-17 23:22:44

标签: java logging log4j composition

我正在log4j中编写一个自定义appender,它使用组合来包装另一个appender(并通过自定义appender路由一些appender的功能)。基本上,代码看起来类似于:

public class CustomAppender extends AppenderSkeleton {
    private Appender target;

    @Override 
    public void activateOptions() {
        super.activateOptions();
        if (target == null) {
            errorHandler.error("Target is null");
        }
    }

    @Override 
    protected void append(LoggingEvent event) {
        if (target == null) {
            errorHandler.error("Target is null");
        } else {
            target.doAppend(this.processEvent(event));
        }
    }

    @Override 
    public void close() {
        if (target != null) target.close();
    }

    public Appender getTarget() {
        return target;
    }

    public void setTarget(Appender target) {
        this.target = target;
    }

    @Override 
    public boolean requiresLayout() {
        return target == null ? false : target.requiresLayout();
    }
}

我尝试在XML spring配置中设置记录器,如下所示:

...
<prop key="log4j.appender.APPLICATION">CustomAppender</prop>
<prop key="log4j.appender.APPLICATION.Target">org.apache.log4j.DailyRollingFileAppender</prop>
<prop key="log4j.appender.APPLICATION.Target.DatePattern">...</prop>
...

使用DailyRollingFileAppender和log4j的各种其他设置不会产生任何输出。但是,如果我为log4j.appender.APPLICATION DailyRollingFileAppender制作课程并基本上从每个键中移除关键字Target.,它就可以正常工作。

我的班级设置方式有问题吗?我是否误解了财产分配在这里的运作方式?谢谢!

1 个答案:

答案 0 :(得分:0)

我意识到问题更深入,实际上与log4j的PropertyConfigurator类相关联。这就是字符串到类的所有实例化的地方,我似乎必须完全重写它,看起来更好。