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スプリング構成でロガーを設定しようとしました:

...
<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 に答える