Отображение транзакции Spring в журнале

Я настроил весну с поддержкой транзакций. Есть ли способ регистрировать транзакции только для того, чтобы правильно настроить все? Отображение в журнале – хороший способ увидеть, что происходит.

в log4j.properties (для альтернативных журналов или в формате XML log4j, проверьте документы)

В зависимости от вашего менеджера транзакций вы можете установить уровень ведения журнала весеннего фреймворка, чтобы он дал вам больше информации о транзакциях. Например, в случае использования JpaTransactionManager вы устанавливаете

 log4j.logger.org.springframework.orm.jpa=INFO 

(это пакет вашего менеджера транзакций), а также

 log4j.logger.org.springframework.transaction=INFO 

Если INFO недостаточно, используйте 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]

Наиболее интересные данные журнала JtaTransactionManager.java (если этот вопрос по-прежнему относится к JtaTransactionManager ) регистрируются по приоритету DEBUG . Предполагая, что у вас есть log4j.properties где-то на пути к classам, я бы поэтому предложил использовать:

 log4j.logger.org.springframework.transaction=DEBUG 

Для приложения Spring Boot:

 logging.level.ROOT=INFO logging.level.org.springframework.orm.jpa=DEBUG logging.level.org.springframework.transaction=DEBUG 

Поскольку вы можете получить доступ к classам Spring во время выполнения, вы можете определить статус транзакции. Эта статья может помочь вам:

https://dzone.com/articles/monitoring-declarative-transac

Вы также можете включить журналирование JDBC:

 log4j.logger.org.springframework.jdbc=DEBUG 

Вот некоторый код, который я использую в моей реализации Layout Layout, полученный из ch.qos.logback.core.LayoutBase .

Я создаю локальную переменную streamа, чтобы сохранить ссылку на метод org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive() . Всякий раз, когда печатается новая строка журнала, getSpringTransactionInfo() и возвращает односимвольную строку, которая войдет в журнал.

Рекомендации:

  • Советы по отладке @Transactional Spring’s Annotation
  • org.springframework.transaction.support.TransactionSynchronizationManager
  • java.lang.ThreadLocal
  • java.lang.Class.getMethod ()

Код:

 private static ThreadLocal txCheckMethod; private static String getSpringTransactionInfo() { if (txCheckMethod == null) { txCheckMethod = new ThreadLocal() { @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; } 
  • $ {employee.id} из списка в JSP throws java.lang.NumberFormatException: для строки ввода: "id"
  • REST с полной привязкой данных Spring и Jackson
  • Недействительность сессии JPA EntityManager
  • Транзакционная экономия без вызова метода обновления
  • Как настроить сканирование файлов в приложении Spring Boot.exe
  • AbstractMethodError при развертывании Spring 4.0 в Tomcat 6
  • Кварц: выражение Cron, которое никогда не будет выполнено
  • С Spring 3.0, могу ли я сделать необязательную переменную пути?
  • Class Conflict при запуске Java-проекта: ClassMetadataReadingVisitor имеет интерфейс org.springframework.asm.ClassVisitor как суперclass
  • Давайте будем гением компьютера.