2012-08-12 21 views
15

मेरे पास एक ही टोमकैट पर चल रहे कई वेब एप्लिकेशन हैं।लॉग 4j बनाम लॉगबैक: समान लॉग में समवर्ती लेखन?

1- खोज करके, मैं समझ गया कि जब एक से अधिक आवेदन मौजूद हैं, एक ही फाइल में प्रवेश करने में कुछ समस्याएं बना सकता है:

मैं दो प्रश्न हैं। क्या यह एक ही वेब सर्वर पर चल रहे एकाधिक अनुप्रयोगों का मामला है? क्या यह भी सही है जब डिफ़ॉल्ट stdout आउटपुट का उपयोग किया जाता है?

2- Logback पुस्तकालय में एक विवेकपूर्ण विधा है:

विवेकपूर्ण मोड में, FileAppender सुरक्षित रूप से,, निर्दिष्ट फ़ाइल को लिखेंगे भी अन्य FileAppender अलग JVMs में चल रहे मामलों की उपस्थिति में संभावित पर चल रहा है विभिन्न मेजबान समझदार मोड के लिए डिफ़ॉल्ट मान गलत है।

मैं जानना चाहता हूं कि लॉगबैक का उपयोग करना केवल एकाधिक जेवीएम पर अनुकूल है या यह एक ही वेब सर्वर पर चल रहे कई अनुप्रयोगों के लिए फायदेमंद भी है? यदि नहीं, तो क्या यह इस पहलू में log4j के समान है?

धन्यवाद

उत्तर

1
  1. हां। आम तौर पर, आपका सिद्धांत यह होना चाहिए कि आप प्रत्येक एप्लिकेशन (वेब ​​या नहीं) के लिए एक अलग लॉग फ़ाइल लिखें। वैकल्पिक, यह है कि आप इसे लिखने के लिए फ़ाइल पर निर्णय लेने के लिए सर्वर पर छोड़ देते हैं। जेबॉस के पास सामान्य रूप से लॉग आउट करने के तरीके हैं, जो एक ही फाइल पर जाएंगे। हालांकि, मैं अभी भी प्रत्येक एप्लिकेशन के लिए एक अलग लॉग होना पसंद करते हैं।
  2. जहां तक ​​मुझे पता है, लॉग 4j और लॉगबैक दोनों ओवरहेड में न्यूनतम होने का लक्ष्य रखते हैं, वे एप्लिकेशन का कारण बन सकते हैं, इसलिए ऐसा कोई भी संभावना नहीं है जो अधिक अनुकूल हो। यदि आपके लिए एकाधिक JVMs आवश्यक हैं, तो मेरा मानना ​​है कि लॉगबैक इसे संभालने में बेहतर है, लेकिन इसके बाहर इसका उपयोग करना एक बुरा विचार नहीं है।
3

एक बात जो स्पष्ट किया जाना चाहिए नहीं है: वहाँ समस्याओं होगा जब अलग-अलग विविधताएं log4j की एक ही फाइल समवर्ती को लेखन कर रहे हैं, एक ही JVM में चल रहा है या नहीं।

सर्वर (और विभिन्न क्लासलोडर्स) का उपयोग करते समय तैनाती और कॉन्फ़िगरेशन के आधार पर एक सर्वर-व्यापी उदाहरण या Log4j के कई उदाहरण होने के लिए संभव है।

  1. ऊपर देखें। Stdout एक ही मिश्रित आउटपुट समस्या का सामना कर सकता है, लेकिन फ़ाइलों को घूर्णन नहीं करते समय।
  2. लॉगबैक का समझदार मोड अलग-अलग उदाहरणों (समान JVM या नहीं) द्वारा समवर्ती लेखन को संबोधित करेगा। यदि आपकी कॉन्फ़िगरेशन सर्वर-व्यापी Log4j इंस्टेंस का उपयोग करती है तो इस पहलू के लिए कोई फायदा नहीं होता है।
+0

क्या हम विस्तार कर सकते हैं कि क्या मुद्दे हैं? क्या ये हैं: मिश्रित रेखाएं, एक पंक्ति में मिश्रित सामग्री, खोए गए लॉग, रोलिंग फ़ाइल नाम के साथ समस्याएं? – j23

15

दोनों log4j में और logback यदि एक से अधिक FileAppender उदाहरणों में एक ही लॉग फ़ाइल को लिखने, वहाँ एक उच्च कहा लॉग फ़ाइल भ्रष्ट बनने के लिए खतरा नहीं है। चाहे FileAppender एक ही JVM या विभिन्न JVMs पर चलने वाले उदाहरण अप्रासंगिक हैं, यानी भ्रष्टाचार का जोखिम समान है।

डॉक्स में उल्लेख किया है, में prudent mode logback के FileAppender भ्रष्टाचार से बचने जाएगा, यहां तक ​​कि अन्य FileAppender उसी या अन्य JVMs में चल रहे मामलों की उपस्थिति में, अलग-अलग मेजबान पर चल रहा है। डिफ़ॉल्ट रूप से, समझदार मोड अक्षम है।

कंसोल दूषित नहीं किया जा सकता है इसलिए सवाल मंथन है।

1

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

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <!-- Support multiple-JVM writing to the same log file --> 
    <prudent>true</prudent> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 

    <encoder> 
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="FILE" /> 
    </root> 
</configuration> 

कई कुछ एकीकृत स्रोत के लिए लिख JVMs के लिए आपका अन्य विकल्प SocketAppenders और JDBCAppender हैं।

JDBCAppender पूरी तरह से हालांकि भविष्य में बदल दिया जाएगा और है या तो सलाह नहीं दी जाती। लॉगबैक mailinglist देखें।

सॉकेटएपेंडर्स थोड़ा कच्चा हो सकता है, क्योंकि आप शायद लॉगबैक के लिए अधिक कोड लिखने की योजना नहीं बना रहे थे।

एक और विकल्प है। आप clusterlog जैसे कुछ का उपयोग कर सकते हैं, जो आपके पास वास्तव में ऐसी समस्या का समाधान करने के लिए बनाया गया है।

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