2012-05-04 95 views
0

我正在開發一個移動應用程序,並使用log4j來顯示信息。我想使用log4j在控制檯上顯示正確執行的信息,但是當我嘗試添加SMTPAppender以在發生錯誤時發送電子郵件時遇到問題。它不顯示錯誤,但是當我添加SMTPAppender啓動它時,tomcat無法正確啓動。log4j Console和SMTPAppender:如何使用多個appender

我使用Apache Tomcat 7.0.23

這是我log4j.properties文件

log4j.rootCategory=TRACE, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} [application] %-5p %m%n 


log4j.rootCategory=ERROR, mail 

log4j.appender.mail=org.apache.log4j.net.SMTPAppender 
#defines how often emails are send 
log4j.appender.mail.BufferSize=1 
log4j.appender.mail.SMTPHost=smtp.gmail.com 
log4j.appender.mail.SMTPUsername=******* #not the username im using 
log4j.appender.mail.SMTPPassword=******* #not the password im using 
[email protected] 
[email protected] 
log4j.appender.mail.Subject="Application.log error occurred" 
log4j.appender.mail.layout=org.apache.log4j.PatternLayout 
log4j.appender.mail.layout.ConversionPattern=%d{ISO8601} [application] %-5p %m%n 

這是我的控制檯

Found binding in [jar:file:/C:/Documents%20and%20Settings/noconnor/.m2/repository/org/slf4j/slf4j-simple/1.6.1/slf4j-simple-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/C:/Documents%20and%20Settings/noconnor/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

這是添加第二個正確的方法appender還是我在某個地方犯了一個錯誤?

+1

順便說一句,也看到這個如何解決它在使用屬性語法:http://stackoverflow.com/a/728351/47190(注意'閾值'參數)。 –

回答

2

您只能有一個log4j.rootCategory屬性。

你可以有多個附加目的地:

log4j.rootCategory=TRACE, stdout, mail 

但你可能不希望所有的消息去郵寄。爲此,您需要將priority filter添加到您的郵件附件中,但我認爲只能使用XML syntax而不是log4j.properties。

這是一個使用兩個appender的例子,但「mail」appender僅針對ERROR和FATAL消息激活。

<?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"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} [application] %-5p %m%n"/> 
    </layout> 
    </appender> 

    <appender name="mail" class="org.apache.log4j.net.SMTPAppender"> 
    <!-- mail configuration here... --> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{ISO8601} [application] %-5p %m%n"/> 
    </layout> 

    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="levelMin" value="ERROR" /> 
     <param name="levelMax" value="FATAL" /> 
    </filter> 
    </appender> 

    <root> 
    <priority value="trace" /> 
    <appender-ref ref="stdout" /> 
    <appender-ref ref="mail" /> 
    </root> 

</log4j:configuration> 

您需要添加更多郵件配置選項以匹配您的原始屬性文件。該文件必須被稱爲「log4j.xml」,必須使用該文件而不是「log4j.properties」(刪除這個文件)。

+0

這樣排序的問題:)因爲我希望它發送電子郵件給我,只要有電子郵件,將TRACE更改爲ERROR會更好嗎? – newSpringer

+0

如果更改「log4j.rootCategory = ERROR,stdout,mail」,則只會在appender,控制檯和郵件中收到ERROR消息。我想你想在控制檯上看到更多的消息。我會盡力爲你解決問題。 –

+0

如果它沒有太多的麻煩,請問您好嗎...因爲今天才開始學習,所以我不完全確定它是如何工作的。 – newSpringer