मैं वितरित सिस्टम में लॉगिंग घटक जोड़ने की कोशिश कर रहा हूं। वर्तमान स्रोत-कोड को चेन करने से बचने के लिए यह AspectJ
में लिखा गया है। मैं लॉग भेजने के लिए सॉकेट एपेंडर का उपयोग करता हूं, लेकिन मैं कुछ और अधिक प्रभावी कोशिश करना चाहता हूं।वितरित प्रणाली में कौन से परिशिष्ट का उपयोग किया जाना चाहिए? उन्हें कैसे कॉन्फ़िगर करें?
मैंने सुना है कि मुझे JMSAppender
और AsyncAppender
का उपयोग करना चाहिए, लेकिन मैं इसे कॉन्फ़िगर करने में विफल रहा। क्या मुझे Receiver
बनाना चाहिए जो लॉग एकत्र करता है और उन्हें डेटाबेस और जीयूआई में पास करता है (मैं ChainSaw
का उपयोग करता हूं)?
मैंने turorial1 और tutorial2 का पालन करने का प्रयास किया, लेकिन वे पर्याप्त स्पष्ट नहीं हैं।
संपादित करें:
एक छोटा सा डेमो में मैं मैं एक अनुरोध के लिए 6 लॉग भेजा (3 घटकों के सिमुलेशन)
[2012-08-08 15:40:28,957] [request1344433228957] [Component_A] [start]
[2012-08-08 15:40:32,050] [request1344433228957] [Component_B] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [start]
[2012-08-08 15:40:32,113] [request1344433228957] [Component_C] [end - throwing]
[2012-08-08 15:40:32,144] [request1344433228957] [Component_B] [end]
[2012-08-08 15:40:32,175] [request1344433228957] [Component_A] [end]
सॉकेट appender का उपयोग करते हुए तैयार किया है। तो मेरी log4j.properties है:
log4j.rootLogger=DEBUG, server
log4j.appender.server=org.apache.log4j.net.SocketAppender
log4j.appender.server.Port=4712
log4j.appender.server.RemoteHost=localhost
log4j.appender.server.ReconnectionDelay=1000
तो मैं
>java -classpath log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 4712 log4j-server.properties
चलाने विन्यास के साथ
log4j.rootLogger=DEBUG, CA, FA
#
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
#
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=report.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=[%d] [%t] [%c] [%m]%n
तब मैं Chainsaw करने के लिए फ़ाइल अपने लॉग भेजें:
यह बिल्कुल बुनियादी है, लेकिन मैं सीखना चाहता हूं कि इसे बेहतर कैसे किया जाए। सबसे पहले, मैं लॉग को असीमित रूप से भेजना चाहता हूं। फिर बहुत सरल रिसीवर बनाएं, जो उदा। एक फ़ाइल में लॉग पास कर सकते हैं।
मैंने ऊपर सूचीबद्ध ट्यूटोरियल का पालन करने की कोशिश की, लेकिन मैं असफल रहा। तो सवाल यह है: क्या आप कुछ उदाहरण कॉन्फ़िगरेशन प्रदान कर सकते हैं? Receiver.java
और log4.properties
फाइलों का उदाहरण?
मुझे मशीन के नाम से अनुरोध प्रकार के अनुसार लॉग को अलग-अलग फ़ाइलों में विभाजित करने की आवश्यकता है। क्या यह संभव है? – alicjasalamon
क्या आपको इसे वास्तविक समय में करने की ज़रूरत है या इसे रात में संसाधित किया जा सकता है? प्रति फ़ाइल एक फ़ाइल बहुत अक्षम हो सकती है। यदि आप कुछ समय संवेदनशील महसूस कर रहे हैं तो मैं log4j का किसी भी तरह से उपयोग नहीं करता। ;) –
मेरा विचार था: संदेश को 'रिसीवर' में जेएमएस एपेंडर द्वारा असीमित रूप से भेजा जाता है। 'रिसीवर '50 के समूह में सबसे लंबे अनुरोध या एक अनुरोध का चयन करता है, फिर उन्हें चेनसो और डेटा बेस पर भेज दें। क्या मैं इस स्थिति में log4j का उपयोग नहीं करना चाहिए? मैं एक ** आसान ** समाधान – alicjasalamon