0

私はモバイルアプリケーションを開発していて、log4jを使用して情報を表示しています。log4jを使用して、正しく実行されているコンソールに情報を表示したいのですが、エラーが発生したときにSMTPAppenderを追加して電子メールを送信しようとすると問題が発生します。エラーは表示されませんが、SMTPAppenderを追加して起動すると、Tomcatが正しく起動しません。

ApacheTomcat7.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
log4j.appender.mail.From=info@gmail.com
log4j.appender.mail.To=noc@gmail.com
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.

これは2つ目のアペンダーを追加する正しい方法ですか、それともどこかで間違いを犯していますか?

4

1 に答える 1

2

プロパティは1つだけ持つことができlog4j.rootCategoryます。

複数のアペンダーを持つことができます:

log4j.rootCategory=TRACE, stdout, mail

しかし、おそらくすべてのメッセージをメールに送信したくないでしょう。このためには、メールアペンダーに優先度フィルターを追加する必要がありますが、これはlog4j.propertiesの代わりにXML構文を使用してのみ可能だと思います。

これは両方のアペンダーを使用する例ですが、「メール」アペンダーは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」の代わりに使用する必要があります(これを削除してください)。

于 2012-05-04T14:09:56.977 に答える