2011-06-22 10 views
9

Log4jでMySqlデータベースにエラーを記録しますが、これに関する公式文書はかなりまばらです(なぜ?)。 とにかく、ここでのlog4j.xml設定ファイルでの私の試みです:Log4jデータベース・アペンダー

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
<appender name="jdbcAppender" class="org.apache.log4j.jdbc.JDBCAppender"> 
    <param name="URL" value="jdbc:mysql://my_host/my_database" /> 
    <param name="Driver" value="com.mysql.jdbc.Driver" /> 
    <param name="User" value="my_user_name" /> 
    <param name="Password" value="my_passwod" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" 
      value="INSERT INTO errorlogs (Date, log_level, Application, Message, Exception) VALUES (TIMESTAMP(now()),'%p', ?? '%m', '%e')" 
     /> 
    </layout> 
</appender> 

は、私は、カスタムする「アプリケーション」パラメータを必要とします。私は同じことを行うことができ、私はどのように思っていた

<parameter> 
    <parameterName value="?application" /> 
    <dbType value="String" /> 
    <size value="50" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{Application}" /> 
    </layout> 
    </parameter> 

log4net.GlobalContext.Properties["Application"] = applciation; 

と私のXML設定ファイルにそうようにそれを追加します。C#でlog4netのでは、私のコードで私はこのようにそれを追加しますlog4jで?

ありがとうございます!

+0

はありませんので、長い時間前、私はこれを使用します。http://www.mannhaupt.com/danko/projects/が、DBは、ロギングはないような良いidea.Is資源があまりにも「exepensive」です。 – Cris

+0

ええ、私はあなたのポイントを参照してください。将来、TCPAppenderを介してDBログを処理するWebサービスにログを送信したいと思います(これは正しいでしょうか?)。ただし、当面はデータベースに直接記録されます。 – Mathieu

答えて

6

[OK]を、私はこの記事には、このおかげで行う方法が見つかりました:Log4J Custom Fields

基本的に、私はこのように、私のカスタムフィールドを追加するためにMDCを使用します。

MDC.put("Application", application); 

そして、私の設定ファイルで、私は%X {property_name}を使用して値を取得してください。このような:

<layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" 
     value="INSERT INTO errorlogs (Date, log_level, Application, Message, Exception) VALUES (TIMESTAMP(now()),'%p', '%X{Application}' '%m', '%e')" 
    /> 
</layout> 
関連する問題