2012-07-17 97 views
0

我正在寫一個自定義appender在log4j中使用組合來包裝另一個appender(並通過自定義的appenders的一些功能路由)。基本上,代碼類似於此:log4j自定義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配置方式,記錄器:

... 
<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 a DailyRollingFileAppender製作班級,並從每個鍵中刪除關鍵字Target.,則工作得很好。

我的課程設置有問題嗎?我對財產分配在這裏的工作方式有誤解嗎?謝謝!

回答

0

我意識到問題進一步深入,實際上與log4j的PropertyConfigurator類有關。這就是所有的實例化都發生在字符串類的地方,我不得不完全重寫它,看起來,要得到更好的東西。