Problem
前回はログの出力パスを動的に設定する方法を書きました。
ですが、あの方法は Variablesプロパティ に設定した値がロガー全体で共有されてしまいます。
私がやりたかったのは、ログの設定は同一の設定を使うがファイルパスだけ変更したい。ただし、ファイルパスは、プロセスやインスタンス毎に変更したい、という要求でした。
プロセスやインスタンスが常に一定であるならば、NLog.config に必要な数だけ設定を追加すれば済みますが、ファイルパスだけ異なるのに、似たような記述を増やすのは、面倒です。
ここでは、ロガー毎にVariablesプロパティの値を独立して設定する方法を記します。
Solution
まずは、NLog.configを変更します。
1 |
|
ここは前回と同じです。
次に、ソース部分です。
1 | var factory = new LogFactory(); |
前回と異なるのは、LogManager.GetLogger メソッドを使うのではなく、LogFactoryのインスタンスを自分で生成し、LogFactory.GetLogger メソッドを呼び出している箇所です。
logger.Factory プロパティを見るとわかりますが、このプロパティは、LogFactory.GetLogger メソッドから取得している場合、常に同一の値を指すため、当然Configuration.Variables プロパティの中身も一致してしまいます。
これにより、下記のように、Loggerのインスタンス毎に出力先を簡単に切り替えることができます。
1 | var factory1 = new LogFactory(); |