2012-02-21 15 views
5

मैं लॉग-बैक पर 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) पर जा रहे हैं, क्या मैं इसे टाइमस्टैम्प के क्रम में लॉग इन करने के लिए मजबूर कर सकता हूं?

+0

क्या आप कह रहे हैं कि आपके लॉग में आप संदेश मिश्रित टाइमस्टैम्प देखते हैं (बढ़ते नहीं?) इस तरह की घटना को कभी नहीं देखा। आप किस ऐपेंडर का उपयोग कर रहे हैं? –

+0

@TomaszNurkiewicz हां, मैं ch.qos.logback.core.ConsoleAppender – Reddy

+0

का उपयोग कर रहा हूं क्या आप किसी भी सहमति का उपयोग करते हैं? यह एक कारण हो सकता है। साथ ही, क्या आप एक लॉग अंश – Fixpoint

उत्तर

2

अपने लॉग से ही आप देख सकते हैं कि आपके पास कम से कम 2 थ्रेड चल रहे हैं: [email protected] और main

आप उस आदेश को नियंत्रित नहीं कर सकते जिसमें अलग थ्रेड एक ही आउटपुट में अपनी घटनाओं को लॉग करते हैं (आप शायद कर सकते हैं, लेकिन यह एक बुरा विचार होगा)।

आपके लॉग थ्रेड से [email protected] आपके कंसोल पर पहले पहुंच प्राप्त करता है। इसे लिखते समय, main से ईवेंट लॉग होते हैं। एक बार [email protected] इसे लॉक जारी करता है, main इसे प्राप्त करता है और यह फ़ाइल में इसके लॉग को फ्लश कर सकता है।

+0

धन्यवाद सेबे, यह समस्या हो सकती है। लेकिन फिर भी मुझे यह जांचना होगा कि यह लगातार क्यों हो रहा है और जहां से '869082978 @ qtp-1587505558-0' आ रहा है। – Reddy

+0

मुझे समस्या मिली है हालांकि एक और सवाल था। अपडेट किया गया (# 4) प्रश्न। – Reddy

संबंधित मुद्दे