1

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

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>
...

和 log4j的各种其他设置DailyRollingFileAppender不会产生任何输出。但是,如果我为log4j.appender.APPLICATIONa创建类DailyRollingFileAppender并从每个键中删除关键字Target.,它就可以正常工作。

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

4

1 回答 1

0

我意识到这个问题要深入得多,实际上与 log4j 的PropertyConfigurator类有关。这就是字符串到类的所有实例化发生的地方,我似乎必须完全重写它,以获得更好的东西。

于 2012-07-18T22:29:51.393 回答