gpt4 book ai didi

Java 日志记录 : show the source line number of the caller (not the logging helper method)

转载 作者:IT老高 更新时间:2023-10-28 20:41:32 25 4
gpt4 key购买 nike

Java 的众多(叹息...)日志框架都很好地显示了创建日志消息的方法的源文件名的行号:

log.info("hey");

[INFO] [Foo:413] hey

但如果中间有辅助方法,实际调用者将是辅助方法,这并没有太多信息。

log_info("hey");

[INFO] [LoggingSupport:123] hey

在确定要打印的源位置时,有没有办法告诉日志记录系统从调用堆栈中删除一帧?

我想这是特定于实现的;我需要的是通过 Commons Logging 实现的 Log4J,但我有兴趣了解其他选项。

最佳答案

另一种答案。

可以通过使用方法要求log4j排除helper类

Category.log(String callerFQCN, Priority level, Object message, Throwable t)

并将帮助程序类指定为“callerFQCN”。

例如,这是一个使用助手的类:

public class TheClass {
public static void main(String...strings) {
LoggingHelper.log("Message using full log method in logging helper.");
LoggingHelper.logNotWorking("Message using class info method");
}}

以及助手的代码:

public class LoggingHelper {
private static Logger LOG = Logger.getLogger(LoggingHelper.class);

public static void log(String message) {
LOG.log(LoggingHelper.class.getCanonicalName(), Level.INFO, message, null);
}

public static void logNotWorking(String message) {
LOG.info(message);
} }

第一种方法将输出您的预期结果。

Line(TheClass.main(TheClass.java:4)) Message using full log method in logging helper.Line(LoggingHelper.logNotWorking(LoggingHelper.java:12)) Message using class info method

使用此方法时,Log4j 将照常工作,如果不需要,则避免计算堆栈跟踪。

关于Java 日志记录 : show the source line number of the caller (not the logging helper method),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com