对于一些复杂的日志记录任务,我有一个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 <--------
答案 0 :(得分:0)
因为记录器显示了调用它的位置。当您使用:
实例化时LoggerFactory.getLogger(xxx);
xxx
只是您可以在xml / property文件中配置的记录器的名称。
例如:
配置:
log4j.logger.ONE = INFO
log4j.logger.TWO = DEBUG.
<强>代码强>:
a = LoggerFactory.getLogger("ONE");
b = LoggerFactory.getLogger("TWO");
因此,a.debug
未出现在日志中,因为您将日志记录级别配置为INFO
。但当它显示任何内容时,它会显示调用它的位置。