コンポジションを使用して別のアペンダーをラップするカスタムアペンダーを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.APPLICATION
aのクラスを作成しDailyRollingFileAppender
、基本的に各キーからキーワードを削除するとTarget.
、問題なく機能します。
クラスの設定方法に何か問題がありますか? ここでプロパティの割り当てがどのように機能するかについて誤解がありましたか? ありがとう!