我试图找出如何编程配置一个NLog FallbackGroup目标,该目标有两个电子邮件类型的子目标。基于应用程序启动期间发生的一些事情,我想覆盖FallbackGroup目标的两个子目标的" to“部分。
目前,应用程序有一个NLog.config文件,其中包含这些目标。但是,这些值是硬编码的。任何更改都需要重新部署应用程序..。这不是我们想要的。我们真正需要的是在启动时调用的逻辑中修改两个目标中的" to“设置的能力。
下面是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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target name="logfile" xsi:type="File" fileName="BAM_logfile.txt" />
<target xsi:type="FallbackGroup"
name="email-error"
returnToFirstOnSuccess="true">
<target xsi:type="Mail"
name="mailserver1"
to="kevin.orcutt@acme.com"
from="noreply@acme.com"
subject="Exception Message from: ${processname} v:${assembly-version} on ${machinename}"
smtpServer="smtp.acme.com"
smtpPort="25"
layout="${longdate}${newline}${windows-identity} running ${processname} v:${assembly-version} on ${machinename}${newline}At: ${callsite}${newline}Message: ${message}${newline}Exception:${newline}${exception:format=toString,Data:maxInnerExceptionLevel=10}${newline}" />
<target xsi:type="Mail"
name="mailserver2"
to="kevin.orcutt@acme.com"
from="noreply@acme.com"
subject="Exception Message from: ${processname} v:${assembly-version} on ${machinename}"
smtpServer="mail.acme.com"
smtpPort="25"
layout="${longdate}${newline}${windows-identity} running ${processname} v:${assembly-version} on ${machinename}${newline}At: ${callsite}${newline}Message: ${message}${newline}Exception:${newline}${exception:format=toString,Data:maxInnerExceptionLevel=10}${newline}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" maxlevel="Warn" writeTo="logfile" />
<logger name="*" level="Error" writeTo="email-error" />
</rules>
<extensions>
<add assembly="NLog.MailKit"/>
</extensions>
</nlog>所以我的问题是..。是否有一种以编程方式覆盖NLog.config文件中" to“部分子目标的方法,还是在应用程序启动时配置整个FallbackGroup目标的最佳方法?第二个也不是很明显的问题是,我在寻找任何一个解决方案的例子.我也不知道该怎么做.:-(
发布于 2018-03-22 15:31:17
它的工作原理如下:
从适当的XML文件加载配置。这可以是您的app.config或单独的XML文件。然后按名称查找目标,并将其转换为适当的类型。在那里,您可以修改它的属性,无论您认为合适。
var xmlConfig = new XmlLoggingConfiguration("nlog.config");
var target = xmlConfig.FindTargetByName("mailserver1") as MailTarget;
target.To = "...";您可以使用任何目标完成此操作:按名称加载它,然后将其转换为适当的类型。完成更改后,应用配置:
LogManager.Configuration = xmlConfig;这应该在启动时完成,然后才能得到任何记录器。我认为您在应用这些更改之前得到的任何记录器都不会受到影响。
https://stackoverflow.com/questions/49432144
复制相似问题