Відповіді:
у своєму 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 = слід
Він покаже мені журнал таким чином:
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
Оскільки ви можете отримати доступ до весняних класів під час виконання, ви можете визначити стан транзакції. Ця стаття може допомогти вам:
isActualTransactionActive()замість того, щоб отримувати її в кожному дзвінку реєстрації.
Ось який-небудь код, який я використовую в моїй реалізації версії Logback, отриманої від ch.qos.logback.core.LayoutBase .
Я створюю локальну змінну потоку, щоб зберігати посилання на метод org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive(). Щоразу, коли буде роздруковано новий рядок журналу,getSpringTransactionInfo() він буде повернутий односимвольний рядок, який перейде до журналу.
Список літератури:
Код:
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;
}
INFOрівень взагалі не показуватиме будь-яку активність tx, це було б занадто багатослівно.DEBUGтам знадобиться.