C# 如何将值注入我的NLog.config?

C# 如何将值注入我的NLog.config?,c#,nlog,C#,Nlog,我使用NLog.config,但有些值需要从外部更改。例如,目标:地址可能会更改,因此我希望在每次软件启动时设置它 我想象着这样的事情 var logger = new LoggerFactory().AddNLog().CreateLogger<Program>(); logger.target.adress = "myNewAdress"; var logger=new LoggerFactory().AddNLog().CreateLogger(); logger.targe

我使用NLog.config,但有些值需要从外部更改。例如,目标:地址可能会更改,因此我希望在每次软件启动时设置它

我想象着这样的事情

var logger = new LoggerFactory().AddNLog().CreateLogger<Program>();
logger.target.adress = "myNewAdress";
var logger=new LoggerFactory().AddNLog().CreateLogger();
logger.target.address=“MyNewAddress”;

如何设置NLog.config的值?

您可以在C中编辑配置,如下所示:

var配置=LogManager.configuration;
var fileTarget=configuration.FindTargetByName(“myTargetName”);
fileTarget.FileName=“${basedir}/file.log”;
LogManager.Configuration=Configuration//申请
请注意,结合配置文件(nlog.config)并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如

public void UpdateConfig()
{
    var configuration = LogManager.Configuration;
    var fileTarget = configuration.FindTargetByName<FileTarget>("myTargetName");
    fileTarget.FileName = "${basedir}/file.log";
    LogManager.Configuration = configuration; //apply
}

// On start of your program
UpdateConfig();

LogManager.ConfigurationReloaded += (sender, e) =>
{
    //Re apply if config reloaded
    UpdateConfig();
};
public void UpdateConfig()
{
var配置=LogManager.configuration;
var fileTarget=configuration.FindTargetByName(“myTargetName”);
fileTarget.FileName=“${basedir}/file.log”;
LogManager.Configuration=Configuration;//应用
}
//在节目开始时
UpdateConfig();
LogManager.ConfigurationReloated+=(发送方,e)=>
{
//如果重新加载配置,请重新应用
UpdateConfig();
};

另请参见:

我建议您使用NLog上下文LayoutRenders,而不是在运行时修改目标属性。当然,它要求目标属性支持NLog布局

NLog.config的示例:

<nlog>
    <targets>
       <target type="file" name="file" fileName="${gdc:item=LogDir}\LogFile.txt}" />
    </targets>
    <rules>
       <logger minLevel="Trace" writeTo="file" />
    </rules>
</nlog>
${gdc}
也可以与组合使用,因此当代码中没有任何内容时,可以提供回退默认值

另见:

NLog.GlobalDiagnosticsContext.Set("LogDir", "C:\\Temp");