2016-09-18 9 views
0

私はログファイル名をコードから簡単に設定できるc#のログフレームワークを探しています。c#logging framework - 明示的な名前を持つログファイル

私のプログラムでは、いくつかのバックグラウンドワーカーが起動し、すべてが自分のログファイルにログインする必要があります。 彼らは仕事のために同じクラスを使用します。

backgroundworker1: 
 
    var aboImport = new CSVImport(file1);  <-- logs into backgroundWorker1.log 
 
    aboImport.Execute(); 
 
    ArchiveFile(file1); 
 
    
 
backgroundworker2: 
 
var addressImport = new CSVImport(file2);  <-- logs into backgroundWorker2.log 
 
addressImport.Execute(); 
 
ArchiveFile(file2); 
 
    
 
e.g. 
 

 
backgroundWorker1.log 
 
backgroundWorker2.log 
 
backgroundWorker3.log 
 
... 
 

 
heartbeat.log     <-- I´can see my workers or main thread is running an working

- 私の瞬間にlog4netのを使用して使用するが、これは私のニーズに合わせていないようです。 私は(Create multiple Logfiles with dynamic Names with log4net)どこでコード内に動的なアペンダーを作成するかを見つけました。 しかし、私はlog4netの定義が通常ネームスペースに結びついているので、これはうまくいきません。 他のロギングフレームワークはこれをよりエレガントにできますか?どのロギングフレームワークを推奨しますか?

+0

Log4netは市場で最も優れたログ記録ツールです。複雑ですが、シンプルな設定も可能です。 –

+0

@ P.K。、lol ...そのもはやサポートされていません。最後のリリースは1年前だった。 – SledgeHammer

答えて

1

nlogを使用すると、異なるファイルターゲットを持つロガーを簡単に作成できます。

private static void Main(string[] args) 
{ 
    var config = LogManager.Configuration; 
    AddLogger(config, "logger1", @"C:\Temp\Logfile\Log1.txt"); 
    AddLogger(config, "logger2", @"C:\Temp\Logfile\Log2.txt"); 
    LogManager.Configuration = config; 

    var logger1 = LogManager.GetLogger("logger1"); 
    logger1.Debug("Test1"); 

    var logger2 = LogManager.GetLogger("logger2"); 
    logger2.Debug("Test2"); 
} 

private static void AddLogger(LoggingConfiguration config, string loggerName, string fileName) 
{ 
    var fileTarget = new FileTarget(); 
    config.AddTarget(loggerName, fileTarget); 
    fileTarget.FileName = fileName; 

    var rule = new LoggingRule(loggerName, LogLevel.Debug, fileTarget); 
    config.LoggingRules.Add(rule); 
} 
+0

最近、 'config.AddRule'を追加して、NLogルールを追加/作成するのが簡単になりました – Julian

1

Log4Netから離れてください。これは積極的に開発されたプロジェクトではありません。最後のリリースはほぼ1年前(12/2015)でした。 NLogはずっとサポートされています。

すべてのロギングフレームワークでは、さまざまな「マクロ」をまとめたテンプレートをすべて実行できます。ファイル名はthreadIdやその他の動的値に基づいている場合があります。キーと値のペアを使用します。利用可能なすべての "マクロ"を見て、シナリオで動作するマクロを選択する必要があります。

+0

アクティベリーが開発していない問題は何ですか?ログ記録フレームワークのすべてのfeautersを持っているときは、スムーズに動作しますか? ..すべてのコードが同じスレッドで実行される保証はないので、私はthreadIdにファイル名を関連付けることはできません。このファイルに明示的にログできるように、ファイル名をオブジェクトのインスタンスに設定する必要があります。 – JohnnyBravo75

+0

@ JohnnyBravo75あなたは放棄されたプロジェクトをあなたまで使いたいと思っています:)すべてのロギングフレームワークは同じ機能を持ち、同じように動作します。 Nlogが最もアクティブです。私が言ったように、ファイル名を動的に構築するために選択できるマクロはたくさんあります。 – SledgeHammer

関連する問題