2008-10-20 10 views
15

6.समस्या 6

webapp, कॉमन्स-लॉगिंग API का उपयोग करता है मैं एक apring webapp में लॉगिंग सेटअप बिल्ला के तहत तैनात wih एक समस्या है क्रम log4j पर होना चाहिए इस्तेमाल किया गया। लॉग फ़ाइल बनाई गई है लेकिन खाली बनी हुई है - कोई लॉग प्रविष्टियां नहीं होती हैं।

वेब-INF/web.xml:

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/log4j.xml</param-value> 
    </context-param> 
    <listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

वेब-INF/वर्गों/commons-logging.properties:

सेटअप निम्नलिखित है

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 

WEB- आईएनएफ/log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    ... 
    </appender> 
    <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="${catalina.home}/logs/my.log"/> 
    ... 
    </appender> 

    <logger name="my.package"> 
    <level value="INFO"/> 
    </logger> 

    <root> 
    <level value="ERROR"/> 
    <appender-ref ref="CONSOLE"/> 
    <appender-ref ref="FILE"/> 
    </root> 
</log4j:configuration> 

फ़ाइल लॉग/my.log बनाया गया है, लेकिन कोई लॉग दिखाई नहीं देता है। टॉमकैट कंसोल पर जानकारी लॉग हैं, लेकिन कॉन्फ़िगर किए गए लेआउट पैटर्न के साथ नहीं।

कॉमन्स-लॉगिंग-1.1.1.jar और log4j-1.2.14.jar WEB-INF/lib में शामिल हैं। कोई विचार क्या गलत है?

उत्तर

10

कॉमन्स-लॉगिंग के उपयोग के बारे में वेब चेतावनी वाले लोगों पर कई दस्तावेज उदाहरण हैं। इतना तो, SLF4J बहुत लोकप्रियता प्राप्त कर रहा है।

ध्यान दें कि आप Log4j के साथ टोमकैट का उपयोग करने में रुचि नहीं रखते हैं, तो आपको सीधे अपने आवेदन में Log4j का उपयोग करना चाहिए। विशेष रूप से यदि कोई मौका नहीं है कि आप भविष्य में लॉगिंग फ्रेमवर्क स्विच कर रहे होंगे। यह आपके आवेदन की जटिलता को कम करेगा, और आपके द्वारा कॉमन्स-लॉगिंग के साथ होने वाले किसी भी वर्ग लोडर मुद्दों से छुटकारा पाएं।

यह अपेक्षाकृत आसान खोज और आपके टेक्स्ट में प्रतिस्थापित होना चाहिए, क्योंकि कॉमन्स-लॉगिंग और log4j दोनों लॉगिंग विधियों के लिए समान कॉल संरचना का उपयोग करते हैं।

+1

मुझे लगता है कि कॉमन्स-लॉगिंग (1.1 के बाद से, जहां बग के परिणामस्वरूप स्मृति लीक हो जाती है) ठीक है। लेकिन शायद यह log4j का उपयोग करने के लिए सबसे अच्छा समाधान है - पुस्तकालयों को कॉमन्स-लॉगिंग अनलॉग का उपयोग करके छोड़कर। –

+0

यह सब टॉमकैट 5.5 में काम करता था - कभी-कभी चीजें खराब हो रही हैं –

+1

नहीं, कॉमन्स-लॉगिंग अभी भी कचरा (2010) है, slf4j का उपयोग करें। http://articles.qos.ch/thinkAgain.html – Manius

1

आपको पूर्ण कॉमन्स-लॉगिंग के लिए अतिरिक्त घटक संकलित करने की आवश्यकता है। डिफ़ॉल्ट रूप से टॉमकैट 6 कॉमन्स-लॉगिंग के हार्डकोडेड कार्यान्वयन का उपयोग करता है जो हमेशा java.util.logging पर प्रतिनिधि होता है।

बिल्डिंग निर्देश यहाँ http://tomcat.apache.org/tomcat-6.0-doc/building.html

फिर बिलाव के/bin निर्देशिका में बिल्ला-juli.jar की जगह और log4j और config के साथ/lib निर्देशिका में बिल्ला-Juli-adapters.jar जगह।

+0

मैं log4j के साथ प्रवेश करने के लिए, बस बिल्ला ही अभ्यस्त नहीं है मेरी वेब अप्प। या क्या एक टोमकैट क्लासलोडर बग है जो अपने स्वयं के कॉमन्स लॉगिंग प्रदान करने की इजाजत नहीं देता है? –

+0

यदि टोमकैट के कॉमन्स लॉगिंग कक्षाएं इसके lib पथ में हैं, तो यह WEB-INF/lib में किसी भी JARs लोड होने से पहले लोड हो जाएगा। –

+0

समस्या टॉमकैट 6 में क्लासलोडर डिज़ाइन है (सामान्य में सिस्टम को पैरेंट नहीं होना चाहिए)। –

5

विशेष रूप से सावधान रहें कि आपके पास टॉमकैट कॉमन्स/lib निर्देशिका में log4j.jar रखा गया है। यदि रूट क्लासलोडर log4j लाइब्रेरी लोड करता है, तो जब आप अपने वेबएप लॉग 4j का उपयोग करने का प्रयास करते हैं तो आप विवादों और प्रारंभिक समस्याओं में भाग लेंगे।

यदि आपको सामान्य टॉमकैट लॉगिंग के लिए log4j का उपयोग करने की आवश्यकता है, तो आपको सावधान रहना होगा कि आपके वेबएप लॉग 4j को लोड करने का प्रयास नहीं करते हैं। यदि आपके पास सर्वर पर एकाधिक वेबपैप्स हैं, तो आपको अनुशासन की आवश्यकता होगी कि प्रत्येक वेबैप का लॉग प्रारंभिकरण अन्य वेबैप के प्रारंभ में नहीं है। प्रत्येक वेबपैप को अद्वितीय लॉगर आईडी का उपयोग करने की आवश्यकता होगी, जिसे अद्वितीय पैकेज नामों के साथ पूरा किया जा सकता है।

एकाधिक वेबपैप्स के साथ टोमकैट में एक सामान्य लॉग 4j का उपयोग करने से गंभीर संघर्ष होते हैं जब आपने पुस्तकालयों को साझा किया है जो सभी लॉगिंग करना चाहते हैं, जैसे हाइबरनेट या स्प्रिंग। अगला वेबैप जो log4j को प्रारंभ करने का प्रयास करता है, वह पिछले के लॉगर को बंद कर सकता है।यह एक गड़बड़ हो सकती है।

-1

मैं गलत हूं। यदि आप उपयोग कर रहे हैं या बी) जानकारी

+0

यह उतना आसान नहीं है, मुझे लॉग 4j कॉन्फ़िगर करना है। –

0

के लिए रूट का लॉग छुट्टी कम करें: के रूप में my.package को

ए) जोड़े appender: निम्नलिखित का प्रयास करें log4j + सामान्य लॉगिंग, आप उपरोक्त अधिकांश कॉन्फ़िगरेशन से बच सकते हैं। सामान्य लॉगिंग LogFactory में JAXP के समान एक खोज सुविधा है, निम्नलिखित प्राथमिकता में, लॉग कार्यान्वयन की खोज, 1. कॉन्फ़िगरेशन विशेषता org.apache.commons.logging. फ़ाइल comons-logging.properties 2. सिस्टम प्रॉपर्टी org.apache के अंदर लॉग इन करें। commons.logging.Log 3. यदि क्लास पथ पर Log4J उपलब्ध है, तो संबंधित रैपर क्लास (Log4JLogger) का उपयोग करें। 4. जेडीके 14 लॉगर 5. सरल लॉग

बस सामान्य-लॉगिंग.जर और सामान्य लॉगिंग-एपीआईजर और log4j.jar दोनों क्लासपाथ पर सुनिश्चित करें।

3

मुझे इसी तरह की समस्या थी और अब एक फिक्स मिला। अतिरिक्त पैरामीटर के साथ बिल्ला शुरू करें:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

+0

मेरे लिए काम किया !! धन्यवाद ! इस पर 1 सप्ताह के लिए अटक गया: पी –

+0

दिनों के लिए यह लड़ रहा था - धन्यवाद! – Marplesoft