6

現在、休止状態での遅延読み込み呼び出しのソースを追跡しようとしています。これを行う最も簡単な方法は、遅延読み込みが発生するたびに休止状態の SQL ログをオンにし、理想的にはいつでもスタック トレース出力をトリガーすることです。ロガーが使用されます。現在、SLF4j を使用する Hibernate 3.5.2 を使用しており、ログの実装として Log4j を使用しています。

AOP を使用してすべてのロギング呼び出しを囲み、それが SQL ロガーへの呼び出しであるかどうかを確認できると思いますが、これはちょっと手間がかかるように思えます。その道を進む前に、私が見逃していたより簡単なアプローチがあるかどうかを知りたかったのです。 .

4

2 に答える 2

5

log4j アペンダーの 1 つを拡張して、それを 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-01T23:15:33.507 に答える
0

独自の SLF4j ブリッジを作成し、それを Log4j ブリッジの代わりにクラスパスに入れることができます。その後、Log4j に委任できますが、AOP を使用せずに、必要に応じて呼び出しを傍受できます。インストルメント化がより簡単に見え、適切なロガーを見つけ出したり、遅延読み込みが発生したりするという点で、AOP に加えて追加の課題に悩まされることはありません。

于 2010-07-01T23:14:30.850 に答える