A certain engineer "COMPLEX"

開発メモ その32 NLogで既存の設定を流用しファイルパスだけ動的に変更する

Problem


前回はログの出力パスを動的に設定する方法を書きました。
ですが、あの方法は Variablesプロパティ に設定した値がロガー全体で共有されてしまいます。
私がやりたかったのは、ログの設定は同一の設定を使うがファイルパスだけ変更したい。ただし、ファイルパスは、プロセスやインスタンス毎に変更したい、という要求でした。

プロセスやインスタンスが常に一定であるならば、NLog.config に必要な数だけ設定を追加すれば済みますが、ファイルパスだけ異なるのに、似たような記述を増やすのは、面倒です。

ここでは、ロガー毎にVariablesプロパティの値を独立して設定する方法を記します。

Solution


まずは、NLog.configを変更します。

ここは前回と同じです。

次に、ソース部分です。

前回と異なるのは、LogManager.GetLogger メソッドを使うのではなく、LogFactoryのインスタンスを自分で生成し、LogFactory.GetLogger メソッドを呼び出している箇所です。
logger.Factory プロパティを見るとわかりますが、このプロパティは、LogFactory.GetLogger メソッドから取得している場合、常に同一の値を指すため、当然Configuration.Variables プロパティの中身も一致してしまいます。

これにより、下記のように、Loggerのインスタンス毎に出力先を簡単に切り替えることができます。

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。