2013-02-26 24 views
13

मैं वर्तमान में एक नया का webapp (बिल्ला 6 पर चल रहा है) शुरू कर रहा हूँ log4j 2.0 और slf4j और कॉमन्स का उपयोग कैसे करें मैं slf4j का उपयोग कर घटकों और घटकों प्रवेश करने कॉमन्स का उपयोग कर रहा लॉग कार्यान्वयन के रूप में log4j 2.0 उपयोग करने की योजना की वजह से कई कारण (मुख्य रूप से परिशिष्ट के लिए: सॉकेटएपेंडर और SyslogAppender लेकिन लॉग इवेंट्स के नुकसान के बिना प्रमोटेड कॉन्फ़िगर रीलोडिंग के कारण भी)एक साथ लॉगिंग

अब मेरे प्रश्न हैं: - मैं किस नई इंटरफ़ेस को अपनी नई कक्षाओं में प्रोग्राम करता हूं? loag4j या slf4j? या यहां तक ​​कि लॉगऑन लॉगिंग भी?

  • जारों को तैनात करने का पसंदीदा तरीका क्या है? उन्हें अपने आवेदन युद्ध में डाल दें या क्या मैं उन्हें टॉमकैट libs में डालूं?

  • मुझे किन जारों को तैनात करने की आवश्यकता है? log4j, कॉमन्स लॉगिंग (slf4j-api-1.7.2.jar) और slf4j एपीआई (slf4j और कॉमन्स बाइंडिंग सहित) (slf4j-api-1.7.2.jar)

उत्तर

20

मैं किस नई इंटरफ़ेस को अपनी नई कक्षाओं में प्रोग्राम करता हूं? loag4j या slf4j?

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

जारों को तैनात करने का पसंदीदा तरीका क्या है? उन्हें अपने आवेदन युद्ध में डाल दें या क्या मैं उन्हें टॉमकैट libs में डालूं?

उन्हें अपने युद्ध में रखें।

टॉमकैट libs निर्देशिका में JAR को रखने का एकमात्र कारण (आईएमओ) है यदि उन्हें मूल पुस्तकालय लोड करने की आवश्यकता है। चूंकि जावा आपको दो अलग-अलग क्लासलोडरों से एक ही मूल पुस्तकालय लोड करने की अनुमति नहीं देगा, इसलिए आपको एक सामान्य स्थान पर रखना होगा। लेकिन यह यहां लागू नहीं होता है।

कुछ लोग अंतरिक्ष बचाने के तरीके के रूप में lib निर्देशिका के बारे में सोचते हैं।यह तब मान्य हो सकता है जब "सर्वर-क्लास" मशीनों में 1 जीबी रैम था, लेकिन यह अब और नहीं है। और lib से बचने का मतलब है कि आप हार्ड-टू-डीबग क्लासलोडिंग समस्याओं से बचते हैं।

मुझे किन जारों को तैनात करने की आवश्यकता है?

  • slf4j-api बुनियादी एपीआई है
  • slf4j-log4j12 मार्गों
  • JCL-ओवर-slf4j अवरोध कॉमन्स लॉगिंग और मार्गों यह SLF4J के माध्यम से (Log4J करने के लिए)
  • Log4J करने के लिए वास्तविक लॉगिंग log4j आपका भौतिक लॉगिंग फ्रेमवर्क होगा

मुझे लगता है कि आपके पास पहले से ही लॉग 4 जे के लिए कॉन्फ़िगरेशन है और/या कॉन्फ़िगरेशन लिखने में सहज हैं। यदि नहीं, और आप जिस पर ध्यान रखते हैं वह कोड से निपट रहा है जो आंतरिक रूप से Log4J का उपयोग करता है, तो log4j-over-slf4j है, जो Log4J कॉल को रोक देगा। फिर आपको लॉगबैक जैसे ढांचे को चुनने की ज़रूरत है।

(ध्यान दें:। मैं मूल रूप से इन पैकेजों के सभी के लिए लिंक जोड़ा है, लेकिन उन्हें पोस्ट करने के लिए पर्याप्त प्रतिनिधि नहीं है तो here's SLF4J संकुल के सभी के साथ Maven भंडार करने के लिए एक कड़ी हाइलाइट किया गया)

+0

1. ठीक 2. जैसा कि मैं समझता हूं कि अगर मैं अपने युद्ध में सभी जार डालता हूं तो मुझे नुकसान होता है कि मेरे पास युद्ध के बाहर लॉगिंग कॉन्फ़िगरेशन नहीं हो सकता है और (ऑटो-अपडेट के साथ) रनटाइम पर कॉन्फ़िगरेशन में हेरफेर कर सकता है। (यह एक tomcat/log4j_2.0 प्रश्न हो सकता है और मुझे इसे एक अलग पोस्ट में पूछना चाहिए) 3. जैसा कि मैं log4j * 2.0 * का उपयोग करने की योजना बना रहा हूं, मुझे लगता है कि मुझे sl44-sl44-impl4jar की बजाय log4j-slf4j-impl.jar की आवश्यकता है .jar, क्या यह सही है? – raudi

+0

लॉग 4j 2.0 का उपयोग नहीं किया है, इसलिए यह सुनिश्चित न करें कि आपको कौन सा कार्यान्वयन JAR की आवश्यकता होगी। लेकिन यह एसएलएफ 4 जे साइट पर उपलब्ध होना चाहिए। – parsifal

+1

अपनी कॉन्फ़िगरेशन को बाहरी रखने के लिए, ताकि आप इसे फ्लाई पर संशोधित कर सकें: आप अभी भी यह कर सकते हैं, lib निर्देशिका में * बस * कॉन्फ़िगरेशन फ़ाइल डालें (और WAR में कुछ भी नहीं)। यह युद्ध के भीतर से एक क्लासपाथ स्कैन द्वारा पाया जाएगा। हालांकि, मैं लॉगिंग स्तर समायोजित करने के लिए जेएमएक्स का उपयोग करना पसंद करता हूं। Log4J 1.2 में एक जेएमएक्स बीन है, और मैं 2.0 में भी अपेक्षा करता हूं; यदि आप इसे तुरंत चालू करते हैं, तो यह प्लेटफ़ॉर्म जेएमएक्स प्रदाता के साथ स्वयं पंजीकृत करता है, ताकि आप इसे एक्सेस करने के लिए जेकोनसोल जैसे टूल का उपयोग कर सकें। – parsifal

1

कृपया ध्यान दें कि मैं इस्तेमाल नहीं किया है Log4J 2.0, हालांकि मैंने Log4J 1.2 के साथ SLF4J का उपयोग किया है। इसके साथ ही, मैं आपके प्रश्नों का उत्तर निम्नानुसार दूंगा:

  1. एसएलएफ 4 जे के लिए कार्यक्रम। इसमें एक अच्छा, सरल एपीआई है जो कि आपको लॉगिंग फ्रेमवर्क से शायद कुछ भी चाहिए। इसके अलावा, अगर आप किसी कारण से निर्णय लेते हैं कि आप लॉगबैक या लॉग 4 जे 1.2 या लॉग 4 जे 2.0 के बजाय जो कुछ भी स्विच करना चाहते हैं, तो आप बैकएंड पर जार को स्विच कर सकते हैं।
  2. निश्चित रूप से जार को एप्लिकेशन युद्ध में डाल दें। आपको जार को एप्लिकेशन सर्वर की lib निर्देशिका में कभी नहीं रखना चाहिए। अन्यथा, वे उस एप्लिकेशन सर्वर पर सभी वेब अनुप्रयोगों को प्रभावित करेंगे, न केवल आपके। इसके अलावा, अनुप्रयोग सर्वर की lib निर्देशिका में जार वेबपैप्स को तैनात करके नियंत्रित नहीं किया जा सकता है, लेकिन मैन्युअल रूप से प्रबंधित किया जाना चाहिए।
  3. ऐसा लगता है कि आपको किसी भी निर्भरता के साथ slf4j-api-1.7.2.jar, log4j-to-slf4j-2.0-beta4.jar, log4j-2.0-beta4.jar और log4j-core-2.0-beta4.jar की आवश्यकता होगी। मुझे यकीन है कि यदि आप इसका उपयोग कर रहे हैं तो मैवेन आवश्यक निर्भरताओं को लाएगा।
+0

1. ठीक 2. ऊपर मेरी टिप्पणी को देखने में यह है: आप सिफारिश में बदल जाती है अगर मैं एक बाहरी करना चाहते हैं (= युद्ध के अंदर नहीं) लॉग कॉन्फ़िगरेशन? 3. मुझे लगता है कि मुझे पुल/बाइंडिंग (log4j-slf4j-impl.jar) की आवश्यकता है, न कि एडाप्टर (log4j-to-slf4j.jar), और @ पारसीफल के रूप में मुझे jcl-over-slf4j.jar की भी आवश्यकता है (मेरे कॉमन्स-लॉगिंग लाइब्रेरीज़ को log4j में slf4j पर लॉग ऑन करने के लिए), क्या यह सही है? – raudi

6

मैं log4j2 साथ slf4j उपयोग कर रहा हूँ और अपने अनुप्रयोग सर्वर संस्करणों परस्पर विरोधी है अगर

slf4j-api-1.7.12.jar 
log4j-api-2.2.jar 
log4j-core-2.2.jar 
log4j-slf4j-impl-2.2.jar 
jcl-over-slf4j-1.7.12.jar(get rid of commons logging jars) 

का उपयोग कर, आप कुछ विक्रेता विशिष्ट classloader सेटिंग्स

जैसे का उपयोग कर ओवरराइड करने के लिए आवश्यकता हो सकती है में weblogic 12 ग मैं src/मुख्य/webapp/वेब-INF अंदर मेरे weblogic.xml

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-web-app 
xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"> 
<container-descriptor> 
    <prefer-application-packages> 
     <package-name>org.apache.log4j.*</package-name> 
     <package-name>org.apache.commons.logging.*</package-name> 
     <package-name>org.apache.commons.lang.*</package-name> 
     <package-name>org.apache.commons.io.*</package-name> 
     <package-name>org.apache.commons.collections4.*</package-name> 
     <package-name>org.slf4j.*</package-name> 
    </prefer-application-packages> 
</container-descriptor> 
<jsp-descriptor> 
    <keepgenerated>true</keepgenerated> 
    <debug>true</debug> 
</jsp-descriptor> 
<context-root>/cnfg</context-root> 
</weblogic-web-app> 
संबंधित मुद्दे