2

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

4

2 回答 2

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。

于 2012-05-02T12:35:37.513 回答
-2

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

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

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

希望能帮助到你。

于 2011-09-29T05:24:27.983 回答