2009-11-25 29 views
12

追加のフィールドをデータベースに挿入してlog4netで使用することはできますか?私はlog-tableの余分なフィールドに持っていたいUserIdを持っています。Log4Netと追加フィールド

私はlog4net.configのフィールドを追加しました:

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

しかし、どのように私は、余分なデータベースフィールドをサポートするためのILogインタフェースを更新します。だから私は例としてログすることができます:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

答えて

19

log4netで「コンテキスト」機能を使用できます。基本的には、ログアペンダーで使用できるプロパティーを設定することができます。さまざまなスコープ(グローバル、スレッドなど)でこれらのプロパティを設定できます。あなたのケースでは、私はあなたが(ユーザーがログインした直後に、例えば)に行くことができると思う:

log4net.ThreadContext.Properties["userid"] = userid; 

コンフィギュレーション・ファイルでは、このプロパティを使用することができ、ロギングアペンダに追加します。私はそれがAdoNetAppender

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

のためにこのようなものになるだろうと思う、私は上記のスニペットのいずれかをコンパイルしていないので、彼らはいくつかの調整を必要とするかもしれないが、それはあなたにどのようにこの可能性の一般的なアイデアを与える必要があることに注意してください解決される。

この詳細については、hereを参照してください。

ps。私は、最初の答えで参照されているMDC.Setは廃止されていると思います。

2

私はMDC.Setを使用して余分なコンテキスト値を設定する必要があると思います。チェックTip #4 in this blogを確認してください。

関連する問題