通过编程方式配置NLog, web.config
本文关键字:web config NLog 配置 编程 方式 | 更新日期: 2023-09-27 18:17:37
我有以下Nlog配置部分在我的网页。配置(修改为只显示相关信息)
<nlog>
<targets async="true">
<target name="mail" type="Mail"
body="${date:format=yyyy-MM-dd HH':mm':ss} - ${level} [${logger}] - ${message} ${newline}${newline}${event-context:item=OtherInfo}${newline}${newline}${exception:maxInnerExceptionLevel=2:format=ToString}${newline}${newline}"
subject="[${machinename}] ${logger}"
to="mail@domain.com" encoding="UTF-8" from="anotheremail@domain.com" smtpServer="" enableSsl="true" smtpAuthentication="Basic"
/>
</targets>
<targets>
<target name="mailsync" type="Mail" body="${date:format=yyyy-MM-dd HH':mm':ss} - ${level} [${logger}] - ${message} ${newline}${newline}${event-context:item=OtherInfo}${newline}${newline}${exception:maxInnerExceptionLevel=2:format=ToString}${newline}${newline}" subject="[${machinename}] ${logger}"
to="mail@domain.com" encoding="UTF-8" from="anotheremail@domain.com" smtpServer="" enableSsl="true" smtpAuthentication="Basic"
/>
</targets>
<rules>
<logger name="*" level="Error" writeTo="mail" />
</rules>
</nlog>
我正在通过Application_Start中的代码更新配置,
var config = LogManager.Configuration;
const string targetName = "mail";
var wrapper = (AsyncTargetWrapper) config.FindTargetByName(targetName);
wrapper.WrappedTarget.SmtpServer = "hostname";
wrapper.WrappedTarget.SmtpUserName = "username";
wrapper.WrappedTarget.SmtpPassword = "password";
config.RemoveTarget(targetName);
config.AddTarget(targetName, wrapper);
LogManager.Configuration = config;
然而,当我记录任何错误时,电子邮件没有被发送。我有一个附加的文件目标(未在代码片段中显示),它包含错误消息。这告诉我错误正在被记录,但不知何故没有通过电子邮件发送。
如果不是通过代码更新配置,如果我在web中硬编码值。配置,然后发送电子邮件。我已经验证了我通过代码使用的smtp值是有效的。
我确实在SO上搜索了许多类似的问题,但我还没有找到一个提到适合我的解决方案。
编辑:根据Xharze的回答,我启用了异常、内部日志记录,并且在完成更改后还输出了目标的值。内部日志显示MailAdrress
格式不正确的异常。所以我检查了所有接受电子邮件地址的目标值,我发现了这个问题。目标的from
属性接受电子邮件地址,而我为它提供了一个显示名称!
你能尝试启用抛出异常和内部日志,并发布它吗?它可能提供更多的信息。看到github.com/NLog/NLog/wiki/Logging-troubleshooting。