如何为包级别日志记录配置log4j?

时间:2011-09-29 05:17:47

标签: log4j flume

我想登录多个日志文件(水槽和控制台)。如何将log4j设置为包级别?即将com.mypackage.myclass设置为flume和其他包进入控制台..

2 个答案:

答案 0 :(得分:0)

首先,您需要将log4j配置为具有两个命名记录器,一个发送到Console 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。

答案 1 :(得分:-2)

查看此博文 http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/

它有一个完整的PDF供下载,可以下载如何将log4j添加到项目中。

您需要为不同的包定义类别。以上PDF中解释了所有内容。

希望它有所帮助。