回答:
あなたのlog4j.properties(代替ロガー、またはlog4jのxml形式については、ドキュメントを確認してください)
トランザクションマネージャーに応じて、Springフレームワークのロギングレベルを設定して、トランザクションに関する詳細情報を提供できます。たとえば、を使用する場合はJpaTransactionManager、
log4j.logger.org.springframework.orm.jpa=INFO(これはあなたのトランザクションマネージャーのパッケージです)、そしてまた
log4j.logger.org.springframework.transaction=INFOINFO十分でない場合は、DEBUG
私にとって、追加するのに適したロギング構成は次のとおりです。
log4j.logger.org.springframework.transaction.interceptor = trace
それは私にそのようなログを表示します:
2012-08-22 18:50:00,031 TRACE-[com.MyClass.myMethod]のトランザクションを取得しています
[メソッドcom.MyClass.myMethodからの自分のログステートメント]
2012-08-22 18:50:00,142 TRACE-[com.MyClass.myMethod]のトランザクションを完了しています
Spring Bootアプリケーションの場合 application.properties
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUGまたは、Yamlを使用する場合(application.yaml)
logging:
   level:
      org.springframework.orm.jpa: DEBUG
      org.springframework.transaction: DEBUGの最も興味深いログ情報JtaTransactionManager.java(この質問がまだに関するものである場合JtaTransactionManager)はDEBUG優先的にログに記録されます。あなたがlog4j.propertiesクラスパスのどこかにあると仮定して、私はこのように使用することをお勧めします:
log4j.logger.org.springframework.transaction=DEBUG実行時にSpringクラスにアクセスできるため、トランザクションのステータスを確認できます。この記事はあなたを助けるかもしれません:
isActualTransactionActive()、ロギングの呼び出しごとに参照を取得するのではなく、スレッドローカル変数を使用して参照をキャッシュする必要があります。
                    これが、ch.qos.logback.core.LayoutBaseから派生したLogback Layout実装で使用するコードです。
メソッドへの参照を格納するスレッドローカル変数を作成しますorg.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()。新しいログ行が出力されるたびに、getSpringTransactionInfo()が呼び出され、ログに入る1文字の文字列を返します。
参照:
コード:
private static ThreadLocal<Method> txCheckMethod;
private static String getSpringTransactionInfo() {
    if (txCheckMethod == null) {
        txCheckMethod = new ThreadLocal<Method>() {
            @Override public Method initialValue() {           
                try {
                    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
                    Class<?> tsmClass = contextClassLoader.loadClass("org.springframework.transaction.support.TransactionSynchronizationManager");
                    return tsmClass.getMethod("isActualTransactionActive", (Class<?>[])null);
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }                      
            }
         };    
    }
    assert txCheckMethod != null;
    Method m = txCheckMethod.get();
    String res;
    if (m == null) {
        res = " "; // there is no Spring here
    }
    else {
        Boolean isActive = null;
        try {
            isActive = (Boolean) m.invoke((Object)null);
            if (isActive) {
                res = "T"; // transaction active                    
            }
            else {
                res = "~"; // transaction inactive
            }
        }
        catch (Exception exe) {
            // suppress 
            res = "?";
        }
    }
    return res;
}
INFOlevelはtxアクティビティをまったく表示しません。冗長すぎます。DEBUGそこで必要になります。