2009-08-06 3 views
5

मेरे पास एक विरासत PSVM एप्लिकेशन है जिसे मैं अपने लॉगिंग आउटपुट को निष्पादन के लिए अद्वितीय फ़ाइलों पर रीडायरेक्ट करना चाहता हूं। इसलिए, अगर मैं इसे 10:00 बजे आमंत्रित करता हूं, तो इसे अपने आउटपुट को {थ्रेड-आईडी} -10: 00.log पर रीडायरेक्ट करें; और निष्पादन का एक और धागा 10:01 पर निष्पादन शुरू कर सकता है, और इसका आउटपुट {थ्रेड-आईडी} -10: 01.log पर जाएगा। मैं समझता हूं कि यह सुरुचिपूर्ण नहीं है।गतिशील रूप से लॉगिंग एपेंडर बनाने और नष्ट करने के लिए

मेरे प्रश्न हैं:

  • संभव है?
  • क्या किसी को यह जानने का विचार है कि कैसे पहुंचे?
  • क्या अब आवश्यकता होने पर किसी एपेंडर को रिलीज़/नष्ट करना संभव है?

धन्यवाद!

उत्तर

4

मैं FileAppender के साथ शुरू और अपने खुद के बनाने के लिए है कि से निकाले जाते हैं जाएगा। मौजूदा थ्रेड आईडी प्राप्त करने के लिए बस अपने संस्करण को संशोधित करें और सृजन से पहले फ़ाइल में एक उपयुक्त थ्रेड-आईडी/टाइमस्टैम्प संलग्न करें। आप धागे आईडी पर कुंजी (buffered) FileWriters का मानचित्र (कहना) बनाए रखेंगे।

appenders लेखन काफी तुच्छ है - here's a Javaworld guide यह कैसे करना है।

उपरोक्त में, क्या यह संभव है कि आपका प्रोग्राम एक मिनट में दो बार शुरू हो जाए? क्या आप एक प्रक्रिया आईडी या विशिष्टता बनाए रखने के समान ही जोड़ना चाहते हैं?

+0

त्वरित उत्तर के लिए धन्यवाद! यह एक धागे के लिए एक से अधिक बार ऐसा करने का मामला नहीं है। लेकिन, किसी भी मामले में, यह चर्चा उद्देश्यों के लिए सिर्फ एक उदाहरण है। नाम विशिष्टता के लिए scoped किया जाएगा। फ़ाइल लेखक को रिलीज़ करने के बारे में कोई विचार? –

+0

+1 अच्छा ट्यूटोरियल लिंक – WolfmanDragon

+0

पुन। रिहा। मुझे लगता है कि आपको प्रत्येक लॉग संदेश (डिस्क पर लिखने के लिए सुनिश्चित करने के बाद) लेखक को फ्लश करना चाहिए, और इसे जारी करने के बारे में चिंता न करें। JVM को सब कुछ नीचे ले जाने दें। जब तक आप बहुत सारे धागे लिख रहे हों और बहुत सारी फाइलें खुली न हों। तो आप सिर्फ 'एन' लेखकों को एक बार में खोलना चाहते हैं और लॉग इन नहीं होने पर कुछ बंद करना चाहते हैं। इसके परिणामस्वरूप कुछ थ्रैशिंग हो सकती है, हालांकि :-) –

1

यह संभव नहीं है, कम से कम log4j में करना आसान नहीं है। हालांकि, अगर आप SiftingAppender लॉगबैक (log4j के उत्तराधिकारी) के साथ शिपिंग देखते हैं, तो यह रनटाइम मापदंडों पर परिशिष्टों के निर्माण को संभालने के लिए डिज़ाइन किया गया है और साथ ही साथ उनकी हटाने के दौरान उन्हें हटाने के लिए डिज़ाइन किया गया है।

आप आवेदन आवेदन लांच प्रति सिर्फ एक लॉग फ़ाइल बनाने के लिए की जरूरत है, तो आप बस अपने लॉग फ़ाइल एक टाइमस्टैम्प के आधार पर नाम दे सकते हैं। यदि आपको और सहायता की आवश्यकता है तो लॉगबैक-उपयोगकर्ता मेलिंग सूची पर चिल्लाओ।

+0

मुझे और अधिक पृष्ठभूमि प्राप्त करने के लिए उत्सुकता है कि यह क्यों संभव नहीं है। यह अपेक्षाकृत सीधा लगता है। मैंने लॉगबैक-उपयोगकर्ता को पोस्टिंग के साथ पीछा किया है। मुझे उम्मीद है कि आप इसे वहां और विस्तृत कर सकते हैं। धन्यवाद! –

+0

यह निर्भर करता है कि आप कस्टम एपेंडर प्रोग्रामेटिक रूप से या कॉन्फ़िगरेशन फ़ाइल के माध्यम से कॉन्फ़िगर करना चाहते हैं या नहीं। बहु-थ्रेडेड एप्लिकेशन में लॉग फ़ाइलों (एक थ्रेड प्रति) को प्रबंधित करने का सवाल भी है। मूल प्रश्न उन दो मुद्दों के बारे में बहुत विशिष्ट नहीं था। – Ceki

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