java - 有没有办法在使用特定记录器时触发堆栈跟踪?

标签 java logging log4j stack-trace slf4j

我目前正在尝试追踪 hibernate 中一些延迟加载调用的来源,最简单的方法是在延迟加载将要发生时打开 hibernate SQL 日志记录,然后理想情况下触发堆栈每当使用记录器时跟踪输出。现在我正在使用 Hibernate 3.5.2,它使用 SLF4j 并使用 Log4j 作为我的日志记录实现。

我想我可以使用 AOP 包围每个日志记录调用并检查它是否是对 SQL 记录器的调用,但这似乎有点笨拙,我想知道在我开始之前是否有我遗漏的更简单的方法沿着那条路走下去。

最佳答案

您可以扩展其中一个 log4j 附加程序,然后在您的 log4j.xml 中使用它。

public class StackPrintingFileAppender extends FileAppender {
    protected void subAppend(LoggingEvent event) {
        new Exception().printStackTrace(new PrintWriter(qw));
        super.subAppend();
    }
}

然后在 log4j.xml 中:

<appender name="logger" class="StackPrintingFileAppender">
    ...
</appender>

关于java - 有没有办法在使用特定记录器时触发堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162288/

相关文章:

java - 在 Maven 项目中使用 Apache POI 运行 .jar 文件

java - JLabel 多行,带有转义符,用于显示 HTML 标签

apache - 可以让 Apache httpd 将错误记录到控制台而不是 Windows 下的日志文件吗?

java - 如何将格式化的 (\and\t) 文本传递给 java 命令行

java - 无法理解科赫曲线分形曲线

ios - 来自 Apple Review Team 的 EXC_BREAKPOINT (SIGTRAP) 崩溃报告

java - 如何获取压缩日志记录 'spring style'

java - log4j中使用的模式是什么

log4j - red5 v0.9 : how can i log information to log file?

java - 如何为 Log4j 创建文件配置