में वसंत लेनदेन दिखा रहा है मैंने लेनदेन संबंधी समर्थन के साथ वसंत कॉन्फ़िगर किया। क्या यह सुनिश्चित करने के लिए लेनदेन लॉग करने का कोई तरीका है कि मैं सबकुछ ठीक से स्थापित करूँ? लॉग में दिखाना यह देखने का एक अच्छा तरीका है कि क्या हो रहा है।लॉग
लॉग
उत्तर
(वैकल्पिक वालों के लिए, या log4j के एक्सएमएल प्रारूप, डॉक्स की जाँच करें)
अपने लेन-देन प्रबंधक के आधार पर आप की लॉगिंग स्तर सेट कर सकते हैं वसंत ढांचे ताकि यह आपको लेनदेन के बारे में अधिक जानकारी देता है। उदाहरण के लिए, JpaTransactionManager
का उपयोग कर के मामले में, आप
log4j.logger.org.springframework.orm.jpa=INFO
(यह आपका लेनदेन प्रबंधक के पैकेज है), और भी
log4j.logger.org.springframework.transaction=INFO
सेट करते हैं INFO
पर्याप्त नहीं है, का उपयोग DEBUG
क्योंकि आप रनटाइम पर स्प्रिंग क्लासेस तक पहुंच सकते हैं, तो आप लेनदेन की स्थिति निर्धारित कर सकते हैं। यह लेख आपको मदद मिल सकती है: अपने log4j.properties
में
टूटी हुई लिंक .... – Gab
बहुत टूटा हुआ है, लेकिन कोशिश करें: [स्प्रिंग के @ ट्रान्सैक्शनल एनोटेशन को डिबग करने के लिए टिप्स] (http://blog.timmattison.com/archives/2012/04/19/tips-for-debugging-springs -ट्रांसेक्शन-एनोटेशन /) (अभी तक इसे स्वयं नहीं किया है)। लेनदेन की स्थिति प्राप्त करने के लिए यह [लेनदेन सिंक्रनाइज़ेशन प्रबंधक] (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html) का उपयोग करता है। कोड को प्रत्येक लॉगिंग कॉल पर पुनर्प्राप्त करने के बजाय 'isActualTransactionActive()' के संदर्भ को कैश करने के लिए शायद थ्रेड-लोकल वैरिएबल का उपयोग करना चाहिए। –
JtaTransactionManager.java
की सबसे रोचक लॉग सूचनाएं (यदि यह प्रश्न अभी भी JtaTransactionManager
के बारे में है) DEBUG
प्राथमिकता पर लॉग इन हैं। मान लें कि आप classpath पर एक log4j.properties
कहीं है, मैं इस प्रकार का उपयोग करने के लिए सुझाव चाहते हैं:
log4j.logger.org.springframework.transaction=DEBUG
साथ ही आप प्रवेश करने JDBC सक्षम हो सकते हैं:
log4j.logger.org.springframework.jdbc=DEBUG
मेरे लिए, जोड़ने के लिए था एक अच्छा प्रवेश config :
log4j.logger.org.springframework.transaction.interceptor = ट्रेस
यह मुझे उस तरह लोग इन दिखाएगा:
2012-08-22 18: 50: 00,031 ट्रेस - [com.MyClass.myMethod]
[मेरे अपने लॉग विधि से बयान के लिए लेन-देन हो रही कॉम .MyClass.myMethod]
2012-08-22 18: 50: 00,142 ट्रेस - लेन-देन को पूरा करने [com.MyClass.myMethod]
ग्रेट के लिए लॉगिंग कॉन्फ़िगरेशन बदलने की आवश्यकता होगी! अन्य पैकेजों की सभी जानकारी/डीबग/ट्रेस लॉगिंग करने की आवश्यकता नहीं है, जब आप यही खोज रहे हैं: डी – Johanneke
स्प्रिंग बूट आवेदन के लिए के लिए:
logging.level.ROOT=INFO
logging.level.org.springframework.orm.jpa=DEBUG
logging.level.org.springframework.transaction=DEBUG
यहां कुछ कोड है जो मैं ch.qos.logback.core.LayoutBase से प्राप्त मेरे लॉगबैक लेआउट कार्यान्वयन में उपयोग करता हूं।
मैं विधि org.springframework.transaction.support.TransactionSynchronizationManager.isActualTransactionActive()
के संदर्भ को संग्रहीत करने के लिए एक थ्रेड-स्थानीय चर बना देता हूं। जब भी कोई नई लॉग लाइन मुद्रित होती है, getSpringTransactionInfo()
कहा जाता है और यह एक-वर्ण स्ट्रिंग देता है जो लॉग में जाएगा।
संदर्भ:
- Tips for Debugging Spring's @Transactional Annotation
- org.springframework.transaction.support.TransactionSynchronizationManager
- java.lang.ThreadLocal
- java.lang.Class.getMethod()
कोड:
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;
}
- 1. लॉग
- 2. लॉग
- 3. लॉग
- 4. 'लॉग'
- 5. matplotlib: एक लॉग-लॉग साजिश
- 6. Django लॉग घूर्णन और लॉग फ़ाइल स्वामित्व लॉग
- 7. लॉग 4j2 लॉग हाइबरनेट पैरामीटर बाध्यकारी
- 8. लॉग 4Net लॉग स्तर को कॉन्फ़िगर करना
- 9. गिट लॉग: भविष्य के संशोधन का लॉग
- 10. विंडोज इवेंट लॉग बनाम टेक्स्ट लॉग
- 11. लिनक्स-जावा लॉग लॉग 4j या logrotate.d
- 12. लेनदेन लॉग
- 13. लॉग 4j
- 14. लॉग 4Net
- 15. पुनर्लेखन लॉग
- 16. गिट लॉग
- 17. लॉग एंबोरिदम
- 18. लॉग 4net
- 19. अपाचे लॉग
- 20. लॉग 4j
- 21. लॉग 4j
- 22. लॉग 4Net
- 23. लॉग इन
- 24. लॉग 4j
- 25. Capybara: लॉग
- 26. लॉग त्रुटि
- 27. लॉग 4net
- 28. डीबग लॉग
- 29. लॉग 4j
- 30. लॉग 4net
'INFO' स्तर किसी भी टीएक्स गतिविधि को बिल्कुल नहीं दिखाएगा, यह भी वर्बोज़ होगा। वहां 'डेबग' आवश्यक होगा। – skaffman
spring3.x – janwen
@ बोझो मेरे पास JpaTransactionManager के लिए काम नहीं है और मैं निगरानी करना चाहता हूं कि पूल से कनेक्शन उधार लिया जाता है और जब इसे किसी विशिष्ट लेनदेन के लिए रिहा किया जाता है। – Ali