31

私は小さなファイル変換ユーティリティを書いています。ファイルは、ディレクトリにドロップされると自動的に変換されます。

ロギングには NLog を使用しています。NLog.confを使用して構成された (生成されたすべてのメッセージを受信する) 中央ログ ファイルに加えて、入力ファイルごとに 1 つの追加のログ ファイルを作成し、同様の名前を持ち、変換プロセス中に書き込まれたすべてのログ メッセージを含めたいと考えています。 .

残念ながら、実行時に新しいファイル ターゲットを適切なルールと共に適切に追加する方法を見つけることができないようです。Logger変換プロセス中に、すべてのオブジェクトが新しいログ ファイルに書き込まれるようにします。

私は何かを試しました

var logfile = new NLog.Targets.FileTarget();
logfile.FileName = fileName + ".log";
logfile.KeepFileOpen = true;
logfile.Initialize();
var rule = new NLog.Config.LoggingRule("*", logfile);
NLog.LogManager.Configuration.LoggingRules.Add(rule);
NLog.LogManager.ReconfigExistingLoggers();
//
// Proceed with converting file
//
logfile.Flush();
NLog.LogManager.Configuration.LoggingRules.Remove(rule);
NLog.LogManager.ReconfigExistingLoggers();

しかし、ログ ファイルは作成されませんでした。

私は何を間違えたのですか?何か案が?

4

1 に答える 1

60

このスレッドの2番目の投稿は、私を解決策に導きました:http: //nlog-project.org/forum.html#nabble-td1685349

現在のNLog構成を取得し、このLoggingConfigurationオブジェクトに変更を加えてから、LogManager.Configurationに割り当てる必要があります。

これは私が使用したコードです:

LoggingConfiguration config = LogManager.Configuration;

var logFile = new FileTarget();
config.AddTarget("file", logFile);

logFile.FileName = fileName + ".log";
logFile.Layout = "${date} | ${message}";

var rule = new LoggingRule("*", LogLevel.Info, logFile);
config.LoggingRules.Add(rule);

LogManager.Configuration = config;

logger.Info("File converted!");
于 2010-08-30T19:31:00.920 に答える