मैं लॉग-बैक पर slf4j का उपयोग कर रहा हूं। कभी-कभी लॉग ऑर्डर (टाइमस्टैम्प) में प्रिंट नहीं होते हैं। क्या हम इसे उसी क्रम में लॉग इन करने के लिए मजबूर कर सकते हैं जैसे कोड चल रहा है?बल slf4j
अद्यतन 1: यह तब होता है जब जेनकिन्स पर मैवेन्स के माध्यम से यूनिट परीक्षण चलाते हैं। यह लगातार हो रहा है। कोड से पहले लॉग स्टेटमेंट आ रहे हैं तो यूनिट टेस्ट से लॉग स्टेटमेंट आ रहे हैं।
इसके अलावा सभी लॉगबैक फ़ाइलें नीचे की तरह सामान्य दिखती हैं।
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
अद्यतन 2: लॉग के टुकड़े (मैं फ़ाइल नाम आदि संपादित किया है ..) इस तरह कर रहे हैं। Test1 निष्पादन के दौरान हम किसी लेनदेन को वापस करने के लिए कोड कहते हैं जो कुछ त्रुटि के कारण विफल हुआ था। लेकिन अजीब बात यह है कि अपवाद पहले मुद्रित होता है और फिर परीक्षण विधियों से लॉग विवरण मुद्रित होते हैं। इसके अलावा लॉग बयान के timestamps अपेक्षा के अनुरूप हैं, लेकिन फाइल में उनमें से आदेश अलग है (14:33:34। 14:33:34 पहले आता है।)
14:33:34.667 [[email protected]] [] WARN org.hibernate.ejb.Ejb3Configuration - hibernate.connection.autocommit = false break the EJB3 specification
14:33:34.718 [[email protected]] [] WARN o.h.impl.SessionFactoryObjectFactory - InitialContext did not implement EventContext
14:33:34.843 [[email protected]] [] DEBUG c.r.a.exception.ExceptionMapper - <3003> can't reverse transaction. [id=10000000100120014]
.
.
.
.
.
14:33:34.158 [main] [] DEBUG c.r.a.test - ========================= test0: finished.
14:33:34.158 [main] [] DEBUG c.r.a.test - ========================= test1: started.
.
.
.
.
14:33:34.449 [main] [] DEBUG c.r.a.test - reversing transaction, id=10000000100120014
14:33:34.856 [main] [] DEBUG c.r.a.test - ========================= test2: started.
अद्यतन 3: हमारी परियोजना मेवेन का उपयोग करती है और कई मॉड्यूल हैं। src/test/resources
फ़ोल्डर में हमारे पास logback-test.xml
है।
परियोजना संरचना इस
codemodule/src/test/resources/logback-test.xml
की तरह है - यह मॉड्यूल जार फ़ाइल में पैक किया जाएगा। टेस्ट केस इस मॉड्यूल के कोड को कॉल करता है।
parent/src/test/resources/logback-test.xml
- यह मूल मॉड्यूल है जो सभी अन्य मॉड्यूल की जार फ़ाइलों और पैकेजों को युद्ध में लपेटता है। यह वह जगह है जहां मेरे पास टेस्ट केस चल रहा है और यह मॉड्यूल के कोड से ऊपर कॉल करता है।
मेरे पास टेस्ट केस कोड और वास्तविक कोड दोनों में लॉग स्टेटमेंट हैं। मैंने जांच की है कि दोनों टेस्ट केस और कोड माता-पिता की लॉगबैक फ़ाइल से पैटर्न का उपयोग कर रहे हैं (कोडमोड्यूल में पैटर्न अलग है)। परीक्षण केस के लॉग प्रिंट करने से पहले यह कोड के लॉग स्टेटमेंट को लगातार प्रिंट करता है।
इसके अलावा हम समानांतर में परीक्षण नहीं चला रहे हैं।
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
अद्यतन 4: मैं इस समस्या को समझते हैं। हम एक http अनुरोध कर रहे हैं जो प्रत्यक्ष विधि कॉल नहीं है। तो परीक्षण मामले main
धागे में चल रहे हैं और वास्तविक कोड किसी अन्य धागे (धन्यवाद सेबे) में चल रहा है।
मुझे लगता है कि लॉगिंग अनुक्रम को मजबूर करना प्रदर्शन हिट हो सकता है लेकिन प्रश्न की पूर्णता के लिए मैं एक और सवाल पूछूंगा।
चूंकि दोनों लॉग एकल एपेंडर (STDOUT) पर जा रहे हैं, क्या मैं इसे टाइमस्टैम्प के क्रम में लॉग इन करने के लिए मजबूर कर सकता हूं?
क्या आप कह रहे हैं कि आपके लॉग में आप संदेश मिश्रित टाइमस्टैम्प देखते हैं (बढ़ते नहीं?) इस तरह की घटना को कभी नहीं देखा। आप किस ऐपेंडर का उपयोग कर रहे हैं? –
@TomaszNurkiewicz हां, मैं ch.qos.logback.core.ConsoleAppender – Reddy
का उपयोग कर रहा हूं क्या आप किसी भी सहमति का उपयोग करते हैं? यह एक कारण हो सकता है। साथ ही, क्या आप एक लॉग अंश – Fixpoint