我想登录到多个日志文件(flume和console)。如何将log4j设置为包级别?将com.mypackage.myclass设置为flume,将其他包设置为console。。
drkbr07n1#
查看此博客文章http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/它有一个完整的pdf供下载如何添加log4j到项目。您需要为不同的包定义类别。所有内容都在上面的pdf中解释。希望有帮助。
vdgimpew2#
首先,您需要将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。
2条答案
按热度按时间drkbr07n1#
查看此博客文章http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/
它有一个完整的pdf供下载如何添加log4j到项目。
您需要为不同的包定义类别。所有内容都在上面的pdf中解释。
希望有帮助。
vdgimpew2#
首先,您需要将log4j配置为具有两个命名的记录器,一个发送到控制台appender,另一个发送到flume。然后可以编写并使用代理类来进行日志调用,根据调用方所在的包将log4j调用路由到不同的日志记录器。您可以通过访问当前线程的堆栈来实现这一点,如下所示:
上面的代码假设您已将两个记录器命名为“flume”和“console”。
在应用程序中进行日志调用时,请使用logger.getlogger(),而不是直接转到log4j。