2008-09-17 9 views
37

मुझे समस्या है कि भले ही मैं रूट टैग में ERROR के स्तर को निर्दिष्ट करता हूं, निर्दिष्ट ऐपेंडर सेटिंग्स के बावजूद फ़ाइल में सभी स्तरों (डीबग, जानकारी, चेतावनी) लॉग करता है। मैं log4j विशेषज्ञ नहीं हूं इसलिए किसी भी मदद की सराहना की जा रही है। यहाँ log4j है log4j.xml Log4j: कॉन्फ़िगरेशन के बावजूद रूट लॉगगर सभी लॉग प्रकारों को एकत्रित क्यों कर रहा है?

छोड़कर

  • मैं log4j.properties के लिए classpath जाँच कर ली है (वहाँ कोई है):

    यहाँ इस विषय पर थोड़ा अधिक जानकारी है। एक्सएमएल फ़ाइल:

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 
    
    
        <!-- ============================== --> 
        <!-- Append messages to the console --> 
        <!-- ============================== --> 
    
    
        <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
         <param name="Target" value="System.out" /> 
    
         <layout class="org.apache.log4j.PatternLayout"> 
          <!-- The default pattern: Date Priority [Category] Message\n --> 
          <param name="ConversionPattern" value="[AC - %5p] [%d{ISO8601}] [%t] [%c{1} - %L] %m%n" /> 
         </layout> 
        </appender> 
    
        <appender name="logfile" class="org.apache.log4j.RollingFileAppender"> 
         <param name="File" value="./logs/server.log" /> 
         <param name="MaxFileSize" value="1000KB" /> 
         <param name="MaxBackupIndex" value="2" /> 
         <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="[AC - %-5p] {%d{dd.MM.yyyy - HH.mm.ss}} %m%n" /> 
         </layout> 
        </appender> 
    
        <appender name="payloadAppender" class="org.apache.log4j.RollingFileAppender"> 
         <param name="File" value="./logs/payload.log" /> 
         <param name="MaxFileSize" value="1000KB" /> 
         <param name="MaxBackupIndex" value="10" /> 
         <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="[AC - %-5p] {%d{dd.MM.yyyy - HH.mm.ss}} %m%n" /> 
         </layout> 
        </appender> 
    
        <appender name="errorLog" class="org.apache.log4j.RollingFileAppender"> 
         <param name="File" value="./logs/error.log" /> 
         <param name="MaxFileSize" value="1000KB" /> 
         <param name="MaxBackupIndex" value="10" /> 
         <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="[AC - %-5p] {%d{dd.MM.yyyy - HH.mm.ss}} %m%n" /> 
         </layout> 
        </appender> 
    
        <appender name="traceLog" 
         class="org.apache.log4j.RollingFileAppender"> 
         <param name="File" value="./logs/trace.log" /> 
         <param name="MaxFileSize" value="1000KB" /> 
         <param name="MaxBackupIndex" value="20" /> 
    
         <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" 
           value="[AccessControl - %-5p] {%t: %d{dd.MM.yyyy - HH.mm.ss,SSS}} %m%n" /> 
         </layout> 
        </appender> 
    
        <appender name="traceSocketAppender" class="org.apache.log4j.net.SocketAppender"> 
         <param name="remoteHost" value="localhost" /> 
         <param name="port" value="4445" /> 
         <param name="locationInfo" value="true" /> 
        </appender> 
    
        <logger name="TraceLogger"> 
         <level value="trace" /> <!-- Set level to trace to activate tracing --> 
         <appender-ref ref="traceLog" />  
        </logger> 
    
        <logger name="org.springframework.ws.server.endpoint.interceptor"> 
         <level value="DEBUG" /> 
         <appender-ref ref="payloadAppender" /> 
        </logger> 
    
        <root> 
         <level value="error" /> 
         <appender-ref ref="errorLog" /> 
        </root> 
    
    </log4j:configuration> 
    

    यदि मैं रूट को किसी अन्य लॉगर से प्रतिस्थापित करता हूं, तो निर्दिष्ट ऐपेंडर पर कुछ भी लॉग नहीं होता है।

    <logger name="com.mydomain.logic"> 
        <level value="error" /> 
        <appender-ref ref="errorLog" /> 
    </logger> 
    

    ... और संकेत के लिए तुम लोगों को धन्यवाद अब तक :-)

+0

क्या आप दिखा सकते हैं कि आपने अभी तक क्या किया है ताकि लोग समीक्षा कर सकें? –

+0

हाँ, मैं करूँगा। लेकिन सुबह (अब मैं बहुत थक गया हूं) –

+0

क्लासपाथ की सामग्री को देखे बिना इसका उत्तर नहीं दिया जा सकता है जिसमें कॉन्फ़िगरेशन फ़ाइल शामिल है जिसका आप उपयोग कर रहे हैं। – cynicalman

उत्तर

4

दो बातें: additivity चेक करें और तय करें कि आप लॉग इन करें प्रवेश की अधिक विस्तृत स्तरों द्वारा कब्जा कर लिया घटनाओं जड़ तक पहुंचने में चाहते हैं लकड़हारा।

दूसरा, रूट लॉगर के लिए स्तर की जांच करें। इसके अलावा आप स्वयं को एपेंडर पर फ़िल्टरिंग भी जोड़ सकते हैं, लेकिन यह सामान्य रूप से आवश्यक नहीं होना चाहिए।

8

अपने प्रोग्राम को -Dlog4j.debug के साथ चलाएं ताकि मानक आउट को लॉग 4j कॉन्फ़िगर करने के तरीके के बारे में जानकारी मिलती है - मुझे संदेह है कि यह जिस तरह से आपको लगता है उसे कॉन्फ़िगर नहीं किया गया है।

5

जेम्स एएन स्टॉफर और सनकीमैन ने जो कहा, उस पर जोड़ने के लिए - मैं शर्त लगाता हूं कि आपके क्लासपाथ पर एक और log4j.xml/log4j.properties है जिसे आप इस्तेमाल करना चाहते हैं, जो log4j को स्वयं कॉन्फ़िगर करने के कारण होता है जिस तरह से है

-Dlog4j.debug किसी भी log4j मुद्दों का निवारण करने के लिए एक पूर्ण हत्यारा तरीका है।

2

यदि आप log4j.properties फ़ाइल का उपयोग कर रहे हैं, तो यह फ़ाइल आमतौर पर आपके क्लासपाथ की जड़ में होने की उम्मीद है, इसलिए सुनिश्चित करें कि यह वहां है।

0

यह सही व्यवहार है। रूट लॉगर डिफ़ॉल्ट व्यवहार की तरह है। इसलिए यदि आप कोई लॉगर निर्दिष्ट नहीं करते हैं तो यह रूट लॉगर स्तर को डिफ़ॉल्ट स्तर के रूप में ले जाएगा लेकिन इसका मतलब यह नहीं है कि रूट लॉगर स्तर आपके सभी लॉग के लिए स्तर है।

आपका कोई भी कोड जो 'TraceLogger'logger या' org.springframework.ws.server.endpoint.interceptor 'लॉगर का उपयोग करके लॉग करता है, क्रमशः TRACE और DEBUG स्तर का उपयोग करके संदेशों को लॉग करेगा, कोई अन्य कोड रूट लॉगजर का उपयोग करके लॉग लॉग का उपयोग करेगा स्तर, जो आपके मामले में त्रुटि है।

तो यदि आप रूट के अलावा अन्य लॉगर का उपयोग करते हैं, तो रूट लॉग स्तर उस लॉगर के लॉग स्तर से ओवरराइड हो जाएगा। वांछित आउटपुट प्राप्त करने के लिए अन्य दो लॉग स्तर को ERROR में बदलें।

मुझे आशा है कि यह सहायक होगा।

69

रूट लॉगर लॉगर पदानुक्रम के शीर्ष पर रहता है।यह तीन तरह से असाधारण है:

  • यह हमेशा मौजूद है,
  • अपने स्तर शून्य पर
  • यह नाम से प्राप्त नहीं किया जा सकता है सेट नहीं किया जा सकता है।

रूट लॉगर सभी परिशिष्टों का जनक है। किसी दिए गए लकड़हारा के लिए प्रत्येक सक्षम प्रवेश अनुरोध है कि लकड़हारा के साथ-साथ appenders (rootLogger सहित)

उदाहरण के लिए, यदि console appender root logger में जोड़ा जाता है पदानुक्रम में जैसे सारे appenders को भेजा जाएगा, तो सभी सक्षम लॉगिंग अनुरोध कम से कम कंसोल पर प्रिंट करेंगे। यदि इसके अलावा एक लॉगर में फ़ाइल एपेंडर जोड़ा जाता है, तो L कहें, फिर L और L's के लिए लॉगिंग अनुरोध सक्षम console पर और पर बच्चों को प्रिंट करेगा। इस डिफ़ॉल्ट व्यवहार को ओवरराइड करना संभव है ताकि एपेंडर संचय अब को additivity झंडा को झूठी पर जोड़कर जोड़ना न हो।

log4j मैनुअल

सारांश में से:

आप माता-पिता वालों के लिए एक प्रवेश घटना का प्रचार नहीं करना चाहते हैं (जैसे कि rootLogger) तो additivity झंडा उन वालों में झूठी में जोड़ें।

<logger name="org.springframework.ws.server.endpoint.interceptor" 
     additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="payloadAppender" /> 
</logger> 

मानक log4j config शैली में (जो मैं एक्सएमएल करना पसंद करते हैं):

log4j.logger.org.springframework.ws.server.endpoint.interceptor = INFO, payloadAppender 
log4j.additivity.org.springframework.ws.server.endpoint.interceptor = false 

आशा इस मदद करता है आपके मामले में।

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