gpt4 book ai didi

log4j - 覆盖 slf4j 中的日志记录方法 (logger.warn)

转载 作者:行者123 更新时间:2023-12-05 08:02:02 24 4
gpt4 key购买 nike

扩展 logger.warn 方法功能的最简单方法是什么?

考虑代码:

logger.warn("Invalid value ({}). Defaulting to UNKNOWN.", value);

我还想在每次遇到警告时打印堆栈跟踪或做一些特别的事情。例如:

logger.warn("Invalid value ({}). Defaulting to UNKNOWN.", value);
for (StackTraceElement stackTraceElement:Thread.currentThread().getStackTrace()) {
logger.warn(stackTraceElement.toString());
}

我希望能够将“for 循环”放入记录器方法中。类似的东西。

public void warn (String s, Object o) {
super(s, o);
for (StackTraceElement stackTraceElement:Thread.currentThread().getStackTrace()) {
logger.warn(stackTraceElement.toString());
}
}

有没有一种简单的方法可以扩展记录器来做到这一点?

最佳答案

Markers ,这是 SLF4J API 的一部分是要走的路。不幸的是,只有 native 实现 SLF4J API 的 logback 框架支持标记。此外,指定的 logback %caller 转换已经支持您描述的开箱即用的用例。

您将添加 %caller conversion word到你的模式。例如,“%d %t %logger - %m%n%caller{2, WITH_CALLER_MARKER}”,其中 WITH_CALLER_MARKER 表示 evaluator .在此配置中,如果 WITH_CALLER_MARKER 评估器返回 true,将打印 3 行调用者数据。

评估器将在 logback.xml 配置文件中指定如下。

<evaluator name="WITH_CALLER_MARKER" 
class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>WITH_CALLER</marker>
</evaluator>

启用调用者信息现在就像使用“WITH_CALLER”标记登录一样简单。这是一个例子,

Marker withCallerMaker = MarkerFactory.getMarker("WITH_CALLER");
Logger logger = LoggerFactory.getLogger("some.name");
logger.warn(withCallerMarker, "Invalid value {}. Defaulting to UNKNOWN.", value);

由于您已经在使用 SLF4J,因此迁移到 logback 非常容易。只需将您的 log4j.properties 文件转换为 logback.xml,删除 slf4j-log4j12.jar,并将 log4j.jar 替换为 logback-*.jar 即可。甚至还有一个 tool to translate log4j.properties 文件到 logback.xml。

我担心用 log4j 实现类似的功能会涉及更多的工作,最终结果也不会那么方便。

关于log4j - 覆盖 slf4j 中的日志记录方法 (logger.warn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766411/

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