2009-02-25 5 views
5

मेरे log4j.xml शामिल हैं:मेरी लॉग 4j लॉग फ़ाइल टाइमस्टैम्प ऑर्डर के बाहर क्यों हैं, और मैं इसे कैसे ठीक करूं?

<appender class="org.jboss.logging.appender.RollingFileAppender" name="rm"> 
    ... 
    </layout> 

मेरे लॉग फ़ाइल टाइमस्टैम्प का क्रम से बाहर हैं पता चलता है। क्या हम टाइमस्टैम्प के आधार पर प्रदर्शित कर सकते हैं?

 
2009-02-19 14:47:01,288 DEBUG [com.catalystwms.core.persistence.TransactionContext] 
2009-02-19 14:54:27,429 INFO [com.catalystwms.tms.services.background.purge.PurgeManager] 
2009-02-19 14:47:01,288 DEBUG [com.catalystwms.core.services.ServiceLocator]

कृपया मेरी मदद करें।

धन्यवाद,

+0

क्या आप एकाधिक सर्वरों से लॉग को एक log4j एपेंडर में एकत्रित कर रहे हैं? क्या आप किसी भी एसिंक्रोनस एपेंडर का उपयोग कर रहे हैं? क्या हो रहा है यह जानने के लिए हमें आपके log4j.xml को और अधिक देखने की आवश्यकता है। – Eddie

+0

हां। कई सर्वर एक सर्वर के भीतर चल रहे हैं और मैं रोलिंगफाइल ऐपेंडर का उपयोग केवल एसिंकैप्डर नहीं कर रहा हूं। धन्यवाद –

उत्तर

3

दो लॉग अलग धागे पर होने वाली बयान कर रहे हैं।

(थ्रेड 1) 2009-02-19 14: 54: 27,429 जानकारी [com.catalystwms.tms.services.background.purge.PurgeManager]
(थ्रेड 2) 2009-02-19 14 : 47: 01,288 DEBUG [com.catalystwms.core.services.ServiceLocator

मेरा मानना ​​है कि लॉग स्टेटमेंट समय सटीक रूप से समय देता है जब घटना हुई थी, लेकिन केवल आदेश के बाहर लिखा गया है क्योंकि थ्रेड 2 लॉक पाने का इंतजार कर रहा है। मेरा मानना ​​है कि अपने एपेंडर को org.apache.log4j.AsyncAppender में लपेटना समस्या को ठीक करना चाहिए।

+0

हां.बहुत सारे थ्रेड चल रहे हैं। क्या मुझे रोलिंगफाइलएपेंडर के एसिंक ऐपेंडर का उपयोग करने की आवश्यकता है? –

+0

आप रोलिंगफाइलएपेंडर को बस इसके आस-पास एक AsyncAppender को लपेट सकते हैं। मुझे नहीं पता कि कॉन्फ़िगरेशन में इसे कैसे किया जाए लेकिन कोड में AsyncAppender की एक विधि है: सार्वजनिक शून्य addAppender (org.apache.log4j.Appender newAppender) – richs

2

दिनांक प्रारूप को सरल वर्ण आधारित क्रम को सही तरीके से ऑर्डर करने के लिए डिज़ाइन किया गया है।

sort server.log | more 

संपादित करें: यह मौजूदा लॉग फ़ाइलों (लॉग 4j को कॉन्फ़िगर करने के लिए नहीं) पर उपयोग के लिए उपयोगी है।

+0

मैं log4j.xml में इसका उपयोग कैसे कर सकता हूं? कृपया –

+0

को स्पष्ट करें log4j में इसका उपयोग न करें, आप बाद में लॉग पर इसका उपयोग करें (जब आप इसे पढ़ रहे हों, शायद)। –

+0

मुझे नहीं पता कि वह प्रविष्टि कहाँ जाना चाहिए? मेरा लॉग गतिशील रूप से बनाया गया है। –

-1

आप शायद लॉग इन होने से पहले इसे ठीक करने में सक्षम नहीं होंगे। आप लॉग 4 जे को प्रत्येक लिखने के बाद .flush() पर कॉल करने का प्रयास कर सकते हैं, लेकिन इससे आपका कोड धीमा हो जाएगा और @ क्रिस नवा का समाधान अधिक उपयुक्त होगा।

1

आपके पास रोलिंग एपेंडर के साथ एक ही लॉग फ़ाइल में लॉगिंग करने के लिए दो अलग-अलग प्रक्रियाएं हैं। Log4j यह अनुमति नहीं देता है। अतीत में, मैंने इसे क्लस्टर वेब ऐप में लॉग फ़ाइल में सर्वर नाम जोड़कर हल किया है: appname-server1.log और appname-server2.log प्रत्येक सर्वर को अपने स्वयं के लॉग में लिखने के लिए कॉन्फ़िगर किया गया है।

यह भी कीड़े है कि एक मशीन के विन्यास बनाम अन्य के लिए विशिष्ट हैं नीचे ट्रैक करने के लिए उपयोगी हो सकता है।

उपरोक्त सभी भी अगर आप दो अलग-अलग आवेदन निष्पादित किया जा रहा के आधार पर फ़ाइलों को नाम से ही लॉग फ़ाइल के लिए लिख अनुप्रयोगों काम करता है।

0

जवाब में @andy रहे हैं:
(थ्रेड 1) 2009-02-19 14: 54: 27,429 जानकारी [com.catalystwms.tms.services.background.purge.PurgeManager]
(थ्रेड 2) 2009-02-19 14: 47: 01,288 डीबग [com.catalystwms.core.services.ServiceLocator

क्या मुझे विश्वास हो रहा हो सकता है धागा 2 से 14 पर एक logRecord बनाता है: 47: 01,288 जब यह करने का प्रयास लिखो, इसे लॉगर की परिशिष्टों की सूची के लिए लॉक प्राप्त करने की आवश्यकता है, लेकिन किसी अन्य थ्रेड में लॉक है और IO करने में व्यस्त है इसलिए थ्रेड 2 प्रतीक्षा करता है। थ्रेड 1 लॉगरेकॉर्ड बनाता है 14: 54: 27,429 यह वही लॉक पाने का प्रयास करता है और इंतजार भी करता है। जब ताला मुक्त हो जाता है तो ओएस इसे थ्रेड 1 देता है और यह प्रिंट करता है।

यदि यह सच है तो दूसरा बड़ा मुद्दा प्रदर्शन में से एक है। कोड पथ IO लॉगिंग पर अवरुद्ध कर सकता है।