2011-09-29 54 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

这是否不回答你的问题? –