我目前正在尝试在hibernate中追踪一些延迟加载调用的来源,最简单的方法是每当延迟加载将要发生时打开hibernate SQL日志记录,然后理想情况下在使用记录器时触发堆栈跟踪输出。现在我使用的是Hibernate 3.5.2,它使用SLF4j并使用Log4j作为我的日志记录实现。
我想我可以使用AOP来包围每个日志记录调用,并检查它是否是对SQL记录器的调用,但这似乎有点笨拙,我想知道在我走上这条路之前是否有一种更简单的方法。
发布于 2010-07-02 07:15:34
您可以扩展其中一个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>发布于 2010-07-02 07:14:31
您可以编写自己的SLF4j桥,并将其放入类路径中,而不是Log4j路径中。然后,您可以委托给Log4j,但可以在您认为合适的时候拦截这些调用,而无需使用AOP。它似乎更容易检测,并且在找出正确的记录器和延迟加载发生时,不会受到AOP之外的任何额外挑战。
https://stackoverflow.com/questions/3162288
复制相似问题