2013-07-15 8 views
5

के साथ मेल नहीं भेजता है, मैंने log4j2 में SMTPAppender के साथ कुछ समस्याएं पहचानी हैं। जब भी error या fatal स्तर के साथ लॉग इवेंट के बिना info के साथ कोई ईवेंट भेजने से पहले कोई घटना नहीं होती है और घातक घटना गायब हो जाती है। (LogTestLog4j2: SMTPAppender त्रुटि या घातक स्तर

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration status="warn"> 

     <!-- mail server configuration --> 
     <properties> 
      <property name="receipients">[email protected]</property> 
      <property name="from">[email protected]</property> 
      <property name="smtpHost">smtp.example.com</property> 
      <property name="smtpPort">25</property> 
      <property name="smtpProtocol">smtp</property> 
      <property name="smtpUser">me</property> 
      <property name="smtpPassword">secret</property> 
     </properties> 

    <appenders> 

     <!-- appender to write all info events to stdout --> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <ThresholdFilter level="info" onMatch="NEUTRAL" onMismatch="DENY"/> 
     </Console> 

     <!-- appender to send mails (default: error and fatal events)--> 
     <SMTP name="Mailer" suppressExceptions="false" 
       subject="Error log" to="${receipients}" from="${from}" 
       smtpHost="${smtpHost}" smtpPort="${smtpPort}" 
       smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}" 
       smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="2"> 
     </SMTP> 
     <!-- appender to send mails asynchronously --> 
     <Async name="AsyncMailer" > 
      <appender-ref ref="Mailer"/> 
     </Async> 

    </appenders> 
    <loggers> 

     <!-- logger to send mail on (at least) info level events --> 
     <logger name="LogTest" level="info" additivity="true"> 
      <appender-ref ref="AsyncMailer"/> 
     </logger> 

     <!-- root logger to see what happens (info level and "above") --> 
     <root level="info"> 
      <appender-ref ref="Console"/> 
     </root> 

    </loggers> 
</configuration> 

मैं समस्या को पुन: करने के लिए इस छोटे से प्रोग्राम का उपयोग किया:

यहाँ मेरी log4j2 विन्यास फाइल (log4j2.xml) और एक छोटे से कार्यक्रम (LogTest.java) समस्या को पुन: करने के लिए है जावा): दो मेल कर रहे हैं:

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

class LogTest 
{ 
    private static Logger logger=LogManager.getLogger("LogTest"); 

    public void testlogger() 
    { 
     /* --> uncomment to enable first mail 
     logger.info("test info 1"); 
     */ 
     logger.fatal("test fatal 1"); 

     /* --> uncomment to enable second mail 
     logger.info("test info 2"); 
     */ 
     logger.fatal("test fatal 2"); 
    } 

    public static void main(String[] args) 
    { 
     LogTest app=new LogTest(); 
     app.testlogger(); 
    } 

} 

आप दो चिह्नित पदों uncomment यदि सब कुछ की तरह उद्देश्य के अनुसार कार्य भेजा गया - प्रत्येक में घातक घटना और पूर्व जानकारी घटना होती है। इसके अतिरिक्त 4 घटनाओं stdout में मुद्रित कर रहे हैं:

test info 1 
test fatal 1 
test info 2 
test fatal 2 

अब, अगर आप केवल टिप्पणी हटाएं सक्रिय/दूसरे स्थान पर - दूसरे मेल (fatal2) का इरादा के रूप में (पहले INFO2 घटना के साथ फिर से) भेज दिया जाता है, लेकिन फिर भी पहला घातक घटना मेल खाने के लिए मुद्रित किया जाता है। निजी तौर पर

test fatal 1 
test info 2 
test fatal 2 

, मेरे लिए यह लगता है जैसे मैंने कुछ गलत और गलत कॉन्फ़िगर किया गया log4j2 मिला है या यह एक बग हो सकता है: उत्पादन के रूप में निम्नानुसार लग रहा है।

अग्रिम में आपकी सहायता के लिए धन्यवाद।

* जोस्ट

नोट:

परीक्षण मैं log4j2-beta7 परियोजना की वेबसाइट से डाउनलोड के लिए इस्तेमाल किया है। प्रलेखन here पाया जा सकता है।

+0

अद्यतन: समस्या का समाधान हो गया था कल (08/28/2013) - निश्चित संस्करण [2.0-बीटा 9] है (https://issues.apache.org/jira/browse/LOG4J2/fixforversion/12324756)। – Jost

उत्तर

2

पहली नज़र में यह एक बग की तरह दिखता है। क्या यह अभी भी होता है यदि आप LogTest लॉगर को हटाते हैं और इस तरह अपने रूट लॉगर को कॉन्फ़िगर करते हैं?

<root level="info"> 
    <appender-ref ref="Console"/> 
    <appender-ref ref="AsyncMailer"/> 
</root> 

FYI करें, आप विभिन्न appenders पर विभिन्न लॉग स्तरों की जरूरत है बाद में अगर आप इस तरह है कि प्राप्त कर सकते हैं (एक अलग लकड़हारा के लिए कोई ज़रूरत नहीं):

<root level="trace"> 
    <appender-ref ref="A" level="info" /> 
    <appender-ref ref="B" level="debug" /> 
</root> 
+0

त्वरित उत्तर के लिए पहले धन्यवाद। हां - जब मैं लॉगटेस्ट लॉगर को हटाता हूं तो प्रभाव वही होता है, इसलिए यह एक बग प्रतीत होता है (कम से कम log4j2-beta7 में)। इस पल के लिए मेरा कामकाज एक घातक या त्रुटि घटना के साथ एक जानकारी घटना उत्पन्न करना है। – Jost

+0

मैंने [परियोजना के मुद्दों की वेबसाइट] (https://issues.apache.org/jira/browse/LOG4J2-310) पर इसके लिए एक मुद्दा खोला है (बस अगर कोई इसे ट्रैक करना चाहता है)। – Jost

+0

जिरा टिकट बनाने के लिए धन्यवाद। -Remko –