Может быть, вы можете сделать это:
<variable name="defaultLogDir" value="c:/defaultdir/"/>
<targets>
<target name="logfile" type="file" fileName="${gdc:overrideDir:whenEmpty=${defaultLogDir}}/hello.txt" />
</targets>
<rules>
<logger name="*" writeTo="logfile" />
</rules>
Затем просто сконфигурируйте overrideDir, используя GDC в коде:
NLog.GlobalDiagnosticsContext.Set("overrideDir","c:/mydir/");
GDC имеет ограничение, что вы не можете включать средства визуализации макета, такие как ${shortdate}
.
Но да, было бы неплохо, если бы keepVariablesOnReload=true
был немного умнее, поэтому он применялся только к переменным, которые были изменены после загрузки конфигурации (сейчас нужно перезапустить, чтобы изменить nlog-переменныев конфигурационном файле).Вы можете создать запрос .