私はマルチスレッドアプリケーションを持っていて、それぞれのスレッドに別々のNLog Config(dest、format)が必要です。
私は別のファイルに各スレッドのデータを記録する必要があるので、コードで設定する必要があります(dest/filename/message形式で区切ってください)。NLogマルチインスタンス、どのように?
私は毎回私が異なっLoggingConfiguration
を定義し、LogManager.Configuration
、それを割り当てられ、それが最後の設定を上書きするので、1つの出力のみが作成されたLogger
の単一のインスタンスを返す GetLogger()
を得ることがわかりました。
NLogでLoggerの複数のインスタンスを持つことはできないようです。
テストするには、ベローテストコードを書きました。
List<Logger> Loggers = new List<Logger>();
for (int i = 0; i < 10; i++)
{
var config = new LoggingConfiguration();
var fileTarget = new FileTarget();
config.AddTarget("file", fileTarget);
fileTarget.Layout = "${message}";
fileTarget.CreateDirs = true;
fileTarget.FileName = Convert.ToString(i)+".txt";
fileTarget.FileAttributes = Win32FileAttributes.ReadOnly | Win32FileAttributes.WriteThrough;
fileTarget.LineEnding = LineEndingMode.CRLF;
var rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
config.LoggingRules.Add(rule2);
LogManager.Configuration = config; // overwrite last config
Loggers.Add(LogManager.GetLogger(Convert.ToString(i)));
}
for (int i = 0; i < 10; i++)
{
Loggers[i].Info("text "+ Convert.ToString(i)); // all written in single output
}
すべての出力は「9.txt」で書かれています。
NLogクラスのマルチインスタンスはどのようにしますか。
ありがとう