2017-05-30 16 views
0

異なるレベルの同じデータベースに対して2つのロガーがあります。私は各ロガーのbufferSizeを変えたいと思います。 1つの方法は、bufferSize要素の違いだけで同じデータベースに2つのアペンダーを持つことですが、コピー貼り付けです。 既に定義されているアペンダーを拡張し、そのbufferSizeプロパティを変更することはできますか?たとえば :同じ要素とプロパティのみ異なる値を持つ2つのアペンダをしている私は避けたいlog4net異なるバッファーを持つデータベースへのアペンダー

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="20" /> 
     ...other elements 
</appender> 
<appender name="AdoNetAppenderChild" extends="AdoNetAppender"> 
    <bufferSize value="1" /> 
</appender> 

    <logger name="Fatal" additivity="false"> 
    <level value="FATAL"/> 
    <appender-ref ref="AdoNetAppenderChild" /> 
</logger> 
    <logger name="Common" additivity="false"> 
    <level value="INFO"/> 
    <appender-ref ref="AdoNetAppender" /> 
</logger> 

がbufferSizeの

+0

_ "それはコピー貼り付け" _ Configは非常によく、冗長で反復的です。このような状況では、設定で倍増するのがおそらくあなたの最善の策です。実行時にバッファサイズを変更してください。唯一の他の選択肢は、アペンダを複製する(または新しいものを作成する)ためのコードを記述することです。これを文書化し、テストする必要があります。 – stuartd

+0

ありがとう。 もう1つの質問ですが、すべてのMVCコントローラ用に単一のスタティックロガーを用意し、そのロガーでセッションからいくつかの追加情報を追加するだけです。 具体的には、log4net.LogicalThreadContext。["sessionVariable"]をセッションから削除した場合、上書きされないか、すべてのリクエストで新しいロガーインスタンスを作成する必要がありますか? – Error

+0

私は静的なロガーで100%自信を持っていません。 log4netはロガーをキャッシュするので、各リクエストで新しいonを作成する方が安全です。 – stuartd

答えて

0

であるあなたは1つのアペンダを作ることができ、あなたが持っている時にログインするために評価者を使用エラーメッセージ:

<evaluator type="log4net.Core.LevelEvaluator"> 
    <threshold value="ERROR"/> 
</evaluator> 

評価者は、ロギングイベントかどうかを判断するために BufferingAppenderSkeletonで使用されているプラ​​グイン可能なオブジェクトであります はバッファリングされるべきではなく、ただちに書き込み/送信されるべきです。評価器 がイベントが重要であると判断した場合、現在のバッファーの内容全体がイベントとともに送信されます。通常、 SmtpAppenderは、メールを送信するコスト が比較的高い可能性があるため、送信前にイベントをバッファリングするように設定されます。重要なイベント が到着した場合、たとえばエラーが発生した場合は、バッファがいっぱいになるのを待つのではなく、すぐに に届きます。これは、重要なイベント が到着したときにバッファリングを心配しないで、 が現在持っているすべてのものを送信する」と言うことができるので、 エバリュエーターが来る場所です。

関連する問題