Log4j

2009-11-04 12 views
41

में Logger.debug() को कैसे सक्षम करें निम्न पंक्तियों को निष्पादित करने का प्रयास करते समय केवल अंतिम दो कथन प्रदर्शित होते हैं ("यहां कुछ त्रुटि है" और "यहां कुछ FATAL" है) और पहले तीन कथन प्रदर्शित नहीं होते हैं मैंने अभी इस विषय को सीखना शुरू कर दिया था, क्या कोई यह बता सकता है कि यह क्यों हो रहा है?Log4j

logger.debug("Here is some DEBUG"); 
    logger.info("Here is some INFO"); 
    logger.warn("Here is some WARN"); 
    logger.error("Here is some ERROR"); 
    logger.fatal("Here is some FATAL"); 

log4j.property

log4j.rootLogger=debug,stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n 
+0

लेकिन मेरे पास log4j.properties पर्याप्त नहीं है? – Hariharbalaji

+0

क्या आप अपनी log4j.properties फ़ाइल पोस्ट कर सकते हैं? –

+2

आपको इसे 'log4j.property' नाम नहीं देना चाहिए, यह 'log4j.properties' –

उत्तर

54

आपके पास शायद इस परियोजना में log4j.properties फ़ाइल है। उस फ़ाइल में आप कॉन्फ़िगर कर सकते हैं कि आप किस स्तर के डीबग आउटपुट चाहते हैं। जो है appender एक छोटे से परिभाषित

log4j.rootLogger=info, console 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

log4j.logger.com.example=debug 

पहली पंक्ति जड़ लकड़हारा करने के लिए "जानकारी", यानी केवल जानकारी के लिए लॉग स्तर सेट, चेतावनी दी है, त्रुटि और घातक कंसोल के लिए प्रिंट किया जाएगा (: इस उदाहरण देखें उसके नीचे)।

अंतिम पंक्ति com.example के लिए लॉगर सेट करती है। * (यदि आप LogFactory.getLogger(getClass()) के माध्यम से अपने लॉगर्स प्राप्त करते हैं) डीबग स्तर पर होंगे, यानी डीबग भी मुद्रित किया जाएगा।

+3

यह एक log4j.xml फ़ाइल भी हो सकती है, जो कि एक XML फ़ाइल है जिसका प्रयोग जावा प्रॉपर्टी फ़ाइल के बजाय किया जाता है। –

+0

हाय, log.isDebugEnabled() मेरी कक्षाओं में से एक में सच प्रिंट कर रहा है लेकिन log.debug() कंसोल पर कुछ भी प्रिंट नहीं कर रहा है। इसे कैसे डिबग करें ..? मदद .. – pavan

8

अपने classpath में log4j.xml नाम की एक फ़ाइल रखो है। सामग्री उदा।

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

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

    <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="debug"/> 
     <appender-ref ref="stdout"/> 
    </root> 

</log4j:configuration> 
+2

उसके पास पहले से ही एक प्रॉपर्टी फ़ाइल है। मैं log4j के नवीनतम संस्करण में विश्वास करता हूं, यह अनुशंसा की जाती है कि आप इसके बजाय एक्सएमएल का उपयोग करें, लेकिन यह आवश्यक नहीं है कि आप ऐसा करते हैं - एक गुण फ़ाइल का उपयोग किया जा सकता है। –

+0

तो समस्या को सुधारने के लिए मुझे क्या करना चाहिए? – Hariharbalaji

2

आपको लॉगर स्तर को सबसे कम प्रदर्शित करने की आवश्यकता है जिसे आप प्रदर्शित करना चाहते हैं। उदाहरण के लिए, यदि आप DEBUG संदेशों को प्रदर्शित करना चाहते हैं, तो आपको लॉगर स्तर को DEBUG पर सेट करने की आवश्यकता है।

Apache log4j manual में कॉन्फ़िगरेशन पर एक अनुभाग है।

+0

मुझे नहीं पता था कि आखिरी कार्यक्रम में समस्या क्या थी, लेकिन मैंने एक ही कोड की प्रतिलिपि बनाई और एक अलग पथ में निष्पादित किया और अब यह काम कर रहा है – Hariharbalaji

2

यह इस तथ्य के कारण हो रहा है कि आपके लॉगर का लॉगिंग स्तर 'त्रुटि' पर सेट है - इसलिए आपको गंभीरता के मामले में केवल त्रुटि संदेश या इस स्तर से ऊपर दिखाई देगा, इसलिए यही कारण है कि आप 'घातक ' संदेश।

यदि आप लॉगिंग स्तर को अपने log4j.xml में अपने लॉगर पर 'डीबग' पर सेट करते हैं तो आपको सभी संदेशों को देखना चाहिए।

log4j व्याख्या के लिए परिचय देखें।

6

ऐसा शायद इसलिए हो रहा है क्योंकि आपकी log4j कॉन्फ़िगरेशन ERROR पर सेट है। निम्नलिखित की तरह सामग्री के साथ एक log4j.properties फ़ाइल के लिए देखो:

log4j.rootLogger=ERROR, CONSOLE 

# console logging 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.Threshold=DEBUG 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n 

rootLogger एक CONSOLE appender का उपयोग कर ERROR स्तर यहाँ पर सेट है।

ध्यान दें कि कंसोल एपेंडर जैसे कुछ परिशिष्टों में Threshold संपत्ति भी है जिसका उपयोग rootLoggers स्तर को ओवरराल करने के लिए किया जा सकता है। आपको इस मामले में दोनों की जांच करनी होगी।

3

मुझे एक फ़ाइल में लॉगिंग जानकारी लिखने के लिए रोलिंग फ़ाइल एपेंडर का उपयोग करना पसंद है। मेरी log4j गुण फ़ाइल आमतौर पर ऐसा कुछ दिखती है। मैं इस तरह से पसंद करता हूं क्योंकि मुझे अलग-अलग पैकेजों के लिए लॉगिंग की अलग-अलग डिग्री की आवश्यकता होने पर पैकेज विशिष्ट लॉगिंग करना पसंद है। उदाहरण में केवल एक पैकेज का उल्लेख किया गया है।

log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.RCS.File.DateFormat='.'yyyy-ww 
#define output location 
log4j.appender.RCS.File=C:temp/logs/MyService.log 
#define the file layout 
log4j.appender.RCS.layout=org.apache.log4j.PatternLayout 
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n 
log4j.rootLogger=warn 
#Define package specific logging 
log4j.logger.MyService=debug, RCS 
46

यहां एक त्वरित एक पंक्ति का हैक कि मैं कभी कभी अस्थायी रूप से एक JUnit परीक्षण में डिबग लॉगिंग चालू करने के लिए उपयोग:

Logger.getRootLogger().setLevel(Level.DEBUG); 
+6

आयात की आवश्यकता के बिना त्वरित ड्रॉप: 'org.apache.log4j.Logger। getRootLogger()। setLevel (org.apache.log4j.Level.DEBUG); ' –

+1

हाँ ... लेकिन यह अत्यधिक संभावना है कि आप कक्षा में 'लॉगर' के साथ पहले से ही काम कर रहे हैं जहां आप लॉगिंग सक्षम कर रहे हैं। आयात शायद पहले से ही है। –

+0

निश्चित रूप से, 'लॉगर' के साथ; लेकिन आमतौर पर 'स्तर' नहीं। –

3

तुम यहाँ आ रहे हैं क्योंकि आप log4j के साथ प्रवेश करने अपाचे कॉमन्स उपयोग कर रहे हैं और log4j काम नहीं कर रहा है जैसा कि आप उम्मीद करते हैं, फिर जांचें कि वास्तव में आपके रन-टाइम क्लासपाथ में log4j.jar है। वह मुझे थोड़ी देर के लिए परेशान था। मैंने अब जावा कमांड लाइन में -Dlog4j.debug शामिल करने के लिए अपने देव पर्यावरण में धावक को कॉन्फ़िगर किया है, इसलिए मैं हमेशा देख सकता हूं कि लॉग 4j सही ढंग से प्रारंभ किया जा रहा है

+0

या सुनिश्चित करें कि आप slf4j-simple jar का उपयोग नहीं कर रहे हैं और slf4j-log4j12 के साथ प्रतिस्थापित करें – Jason