NLog dynamically change filename using NLog.config

gjfonte picture gjfonte · May 19, 2016 · Viewed 12k times · Source

How to dynamically change the FileName using a variable from C#? My idea is to create a log file like Log_<UserId_From_DB>_${date:format=yyyy-MM-dd}.log. Any ideas?

Answer

Julian picture Julian · Sep 25, 2016

Another option is to use the Global Diagnostic Context - $(GDC):

Set the value in C#

GlobalDiagnosticsContext.Set("UserId_From_DB","42");

In the config (nlog.config):

<target type="file" filename="Log_${gdc:item=UserId_From_DB}_${date:format=yyyy-MM-dd}.log" ..>

Please avoid modifying NLog Variables at runtime (See previous answer below). They should be seen as readonly, because they are not threadsafe. NLog Variables will also be affected if LoggingConfiguration is reloaded.

Previous answer with NLog Variables:

Set the value in C#

LogManager.Configuration.Variables["UserId_From_DB"] = "42";

In the config (nlog.config):

<target type="file" filename="Log_${var:UserId_From_DB}_${date:format=yyyy-MM-dd}.log" ..>

If the value is set again, the filename will automatically changed.