NLog で動的にログの出力状況を変更する
設定のオンオフで,ログを出力するかどうかを変えたり,出力先 (ファイルや TextBox など) を変更したい場合。
たとえば NLog.config
が以下のようなときに
<?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="file" xsi:type="File" fileName="${basedir}/app.log"/> </targets> </nlog>
target
は定義されているけど rule
は定義されていないので,このままではログはどこにも出力されていない。
この状況で上記の file
target にログを出力するように変更するには,
using NLog; using NLog.Config; NLog.Targets.Target target = LogManager.Configuration.FindTargetByName("file"); LoggingRule rule = new LoggingRule("*", LogLevel.Debug, target); LogManager.Configuration.LoggingRules.Clear(); LogManager.Configuration.LoggingRules.Add(rule); LogManager.ReconfigExistingLoggers();
のようにする。
LogManager.Configuration.LoggingRules
は List<LoggingRule>
なので,List ジェネリックスのメソッドを使って操作すればよい。ただし操作しただけだとすでに生成されてしまっているロガーには (その設定変更が) 伝わらないので LogManager.ReconfigExistingLoggers()
する必要がある。