我目前正在尝试追踪 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/