2011-09-29 53 views
2

我想登錄到多個日誌文件(水槽和控制檯)。如何設置log4j的爲包級別?即com.mypackage.myclass到水槽等封裝到控制檯..如何爲包級日誌記錄配置log4j?

+0

那麼我知道的只有水槽不支持開箱即用。看看flume-daemon.sh,FLUME_LOGFILE設置爲單個文件: – Shengjie

回答

0

首先,您需要配置log4j以擁有兩個指定的記錄器,一個發送到控制檯appender,另一個發送到Flume。然後,您可以使用代理類來編寫日誌調用,以便根據調用者所在的包將log4j調用路由到不同的日誌記錄程序。您可以通過訪問當前線程的堆棧來執行此操作,如下所示:

public class Logger 
{ 
    public static org.apache.log4j.Logger getLogger() 
    { 
      // this will get the calling frame, 0=Thread, 1=this, 2=caller 
      StackTraceElement stackElement = Thread.currentThread().getStackTrace()[2]; 
      if(stackElement.getClassName().startsWith("the.package.that.goes.to.flume")) 
      { 
       return org.apache.log4j.Logger.getLogger("Flume"); 
      } 
      else 
      { 
       return org.apache.log4j.Logger.getLogger("Console"); 
      } 
     } 
    } 
} 

上面的代碼假設你已經命名了你的兩個記錄器'Flume'和'Console'。

當您在應用程序中進行日誌記錄調用時,請使用Logger.getLogger()而不是直接轉到log4j。

+0

這是否不回答你的問題? –