2012-04-05 5 views
2

私たちは現在のアプリケーションのロギングにlog4netを使用していますが、ロギングフレームワークが現時点で構築されている方法は嫌いです。たとえば、何らかの理由でロギングサーバーに接続できない場合、ロギングを取得しない場合は、現在、単一障害点があります。私は、プライマリが失敗した場合に使用する1つまたは複数の 'バックアップ'アペンダを指定できるようにする柔軟でシンプルなフレームワークとして構築したいと考えています(たとえば、ログサーバーがダウンしていて、代わりに)。.NETロギングフレームワーク設計

あなたが好きでよく書かれたこのようなものにつまずいたことはありますか?私は自分自身を転がり気にしないが、私は私が遭遇したことをすでに構築されたものはありません

おかげ

+0

NLogでは、複数のログターゲットを指定できます。 log4netも許可していませんか? –

+0

私はOPが望んでいると思うが、複数のログターゲットを持っているが、プライマリログが利用できないときには代替ログターゲットを使用するだけである。 – aKzenT

+0

可能な複製:http://stackoverflow.com/questions/3244623/how-to-configure-log4net-for-fallback – aKzenT

答えて

2

車輪の再発明をしないようにしようとの大ファンです。既存のアペンダーを使用する独自のアペンダーを作成することをお勧めしますが、エラーが発生したときの処理をプロパティに追加します。新しいアペンダーの基本クラスとしてAppenderSkeletonを使用し、そこから使用するアペンダーの追加機能を呼び出すことができます。

だから、log4は、あなたのロガーを使用している場合、それはこのようなものになります(注:これは完全ではありませんが、あなたの出発点を与える必要があります):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using log4net.Appender; 
using log4net.Core; 

namespace logger { 
    class FailoverAppender : AppenderSkeleton { 

     protected override void Append(LoggingEvent loggingEvent) { 
      // Send the log message to the web service. 
      try { 
       FirstAppender.Append(loggingEvent); 
      } 
      catch (Exception e) { 
       try{ 
        SecondAppender.Append(loggingEvent); 
       } 
       catch (Exception e2){ 
        ErrorHandler.Error("An error occurred while connecting to the logging service.", e); 
       } 
      } 
     } 
    } 
} 

私はこれがあなたが始めるのに役立ちます願っています、多分あれば完了したら、ここにもソリューションを投稿することができます。

+0

Kevinに感謝します。これは素晴らしいアプローチです...私は実際にlog4jそれはおそらく5〜6年前のことであり、残念なことにそのコードを見つけることはできません。私が何かを見つけたり、最初からそれを書いたりすると、私は間違いなくここに投稿します。 – snappymcsnap

0

私はlog4netがセットアップに苦労するので、代わりにNLogを使うことにしました。 NLogは、セットアップが簡単、使いやすく、コードベースを最新の状態に保たれている(log4netのは、すべてが、放棄されている)

5

SeqSerilogの組み合わせは、これをサポートしています。ロガーはその後、ローリングファイルのセットにすべてのイベントをバッファリング非同期でそれらのファイルを読み取り、HTTP/Sを使用してサーバーに送信します。 );(あなたがSerilogに切り替えることができて幸運なら)私は両方で動作し、このアプローチは、法案に合う方法についていくつかのフィードバックを得ることに熱心projects-

var log = new LoggerConfiguration() 
    .WriteTo.Seq("http://my-seq-server", bufferBaseFilename: "C:\\Logs\\myapp") 
    .CreateLogger(); 

:よう

Configが見えます

関連する問題