首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在使用特定记录器时触发堆栈跟踪?

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

Stack Overflow用户
提问于 2010-07-02 07:02:54
回答 2查看 496关注 0票数 6

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

我想我可以使用AOP来包围每个日志记录调用,并检查它是否是对SQL记录器的调用,但这似乎有点笨拙,我想知道在我走上这条路之前是否有一种更简单的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-02 07:15:34

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

代码语言:javascript
复制
public class StackPrintingFileAppender extends FileAppender {
    protected void subAppend(LoggingEvent event) {
        new Exception().printStackTrace(new PrintWriter(qw));
        super.subAppend();
    }
}

然后在log4j.xml中:

代码语言:javascript
复制
<appender name="logger" class="StackPrintingFileAppender">
    ...
</appender>
票数 5
EN

Stack Overflow用户

发布于 2010-07-02 07:14:31

您可以编写自己的SLF4j桥,并将其放入类路径中,而不是Log4j路径中。然后,您可以委托给Log4j,但可以在您认为合适的时候拦截这些调用,而无需使用AOP。它似乎更容易检测,并且在找出正确的记录器和延迟加载发生时,不会受到AOP之外的任何额外挑战。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3162288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档