繁体   English   中英

SLF4J / LOG4J:在日志实用程序类中使用提供的记录器

[英]SLF4J / LOG4J: Use provided logger in log-utility class

对于某些复杂的日志记录任务,我有一个Utility类来构建日志条目(有些包含多行)。 我正在使用(log4j)ConversionPattern:

<param name="ConversionPattern" value="[%5p] %C{1}-%L: %m%n" />

这是一个简化的示例:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UtilityClass
{
  private final static Logger logger = LoggerFactory.getLogger(UtilityClass.class);

  public static void test(Logger mainLogger, Class<?> c)
  {
    logger.info("Log from UtilClass with UtilClass-Logger");
    mainLogger.info("Log from UtilClass with MainClass-Logger");

    Logger log = LoggerFactory.getLogger(c);
    log.info("buildLogger");
  }
}

现在是MainClass

private final static Logger logger = LoggerFactory.getLogger(MainClass.class);
public void testLogger()
{   
  logger.info("Log from MainClass");
  UtilityClass.test(logger,this.getClass());
}

我正在获得此输出,并且想知道为什么第三行来自UtilityClass。

[ INFO] MainClass-28: Log from MainClass
[ INFO] UtilityClass.test-12: Log from UtilClass with UtilClass-Logger
[ INFO] UtilityClass.test-13: Log from UtilClass with MainClass-Logger     <--------
[ INFO] UtilityClass.test-16: buildLogger

好吧,当然,这正是记录器被调用的地方。 但是,即使在UtilityClass中调用了记录器,也可以将调用类的信息(这里是MainClass)传递给日志条目吗? 我想得到这样的东西:

[ INFO] MainClass-28: Log from MainClass
[ INFO] UtilityClass.test-12: Log from UtilClass with UtilClass-Logger
[ INFO] MainClass-29: Log from UtilClass with MainClass-Logger     <--------
[ INFO] MainClass-29: buildLogger                                  <--------

因为记录器正在向您显示调用它的位置。 当您使用以下方法实例化一个时:

LoggerFactory.getLogger(xxx);

xxx只是您可以在xml /属性文件中配置的记录器的名称

例如:

配置

log4j.logger.ONE = INFO
log4j.logger.TWO = DEBUG.

代码

a = LoggerFactory.getLogger("ONE");
b = LoggerFactory.getLogger("TWO");

因此,因为a.debug日志记录级别配置为INFO ,所以a.debug不会出现在日志中。 但是,当它显示任何内容时,它会显示在何处调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM