Pokazanie wiosennej transakcji w dzienniku
Skonfigurowałem spring z obsługą transakcyjną. Czy jest jakiś sposób, aby rejestrować transakcje tylko po to, aby upewnić się, że wszystko skonfigurowałem poprawnie? Pokazywanie w dzienniku jest dobrym sposobem, aby zobaczyć, co się dzieje.
7 answers
W twoim log4j.properties
(w przypadku alternatywnych loggerów lub w formacie XML log4j sprawdź dokumenty)
W zależności od menedżera transakcji, możesz ustawić poziom logowania w ramach spring framework, aby dawał ci więcej informacji o transakcjach. Na przykład, w przypadku użycia JpaTransactionManager
, ustawiasz
log4j.logger.org.springframework.orm.jpa=INFO
(jest to pakiet twojego menedżera transakcji), a także
log4j.logger.org.springframework.transaction=INFO
Jeśli INFO
to za mało, użyj DEBUG
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-27 09:23:15
Dla mnie dobrym konfiguratorem logowania do dodania było:
Log4j.logger.org. springframework.transaction. interceptor = trace
Wyświetli mi się taki log:
2012-08-22 18:50:00,031 transakcja Trace-Getting dla [Kom.MyClass.myMethod]
[moje własne logowania z method com.MyClass.myMethod]
2012-08-22 18:50:00,142 TRACE-Completing transaction for [com.MyClass.myMethod]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-22 15:58:37
Najciekawsze informacje z dziennika JtaTransactionManager.java
(jeśli to pytanie nadal dotyczy JtaTransactionManager
) są rejestrowane w priorytecie DEBUG
. Zakładając, że masz log4j.properties
gdzieś na classpath, sugerowałbym użycie:
log4j.logger.org.springframework.transaction=DEBUG
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-27 11:26:51
Do aplikacji Spring Boot:
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUG
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 20:09:48
Ponieważ możesz uzyskać dostęp do klas Spring w czasie wykonywania, możesz określić status transakcji. Ten artykuł może Ci pomóc:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-13 06:46:58
Możesz również włączyć logowanie JDBC:
log4j.logger.org.springframework.jdbc=DEBUG
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-11 23:24:39
Oto kod, którego używam w mojej implementacji układu Logback wywodzącej się z ch.qos.logback.rdzeń.LayoutBase .
Tworzę zmienną thread-local do przechowywania referencji do metody org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
. Za każdym razem, gdy wypisywana jest nowa linia dziennika, wywoływana jest getSpringTransactionInfo()
, która zwraca jednoznakowy ciąg znaków, który trafi do dziennika.
Bibliografia:
- Wskazówki dotyczące debugowania Springa @Transactional Adnotacja
- org.springframework.transakcja.wsparcie.TransactionSynchronizationManager
- java.lang.ThreadLocal
- java.lang.Klasy.getMethod()
Kod:
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 08:53:09