【问题标题】:NLog - Use appSetting for EnableSsl in mail section does not workNLog - 在邮件部分对 EnableSsl 使用 appSetting 不起作用
【发布时间】:2019-07-05 09:20:15
【问题描述】:

我正在使用 nlog 通过电子邮件跟踪错误 - 所有配置都存储在 web.config 中。我正在尝试在 nlog 邮件部分中将 appSetting 用于密钥 enableSsl,但没有考虑到此特定密钥(但它适用于其他密钥,例如:smtpServer、from、to、...)

已安装以下软件包:

NLog<br/>
NLog.Extended // required to use appSetting<br/>
Nlog.Targets.Syslog<br/>
Nlog.Web<br/>

文档:
Mail-target

AppSetting-Layout-Renderer

环境是 C# .NET

它崩溃了:enableSsl="${appsetting:Mail.Ssl.Enabled}"
它适用于:enableSsl="False"

web.config:

<appSettings>    
  <add key="Mail.Server" value="mail.myserver" />
  <add key="Mail.Server.Port" value="25" />
  <add key="Mail.Ssl.Enabled" value="False" />
  <add key="Mail.Credentials.User" value="" />
</appSettings>

... 

<nlog ..>
    <targets>
        <target name="mail" xsi:type="Mail" html="true" replaceNewlineWithBrTagInHtml="true" enableSsl="${appsetting:Mail.Ssl.Enabled}" smtpServer="${appsetting:Mail.Server}" from="${appsetting:Mail.From}" to="${appsetting:Mail.To.Error}" subject="Error on my app" layout="${message}..." />
      </target>
  </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="file" />
      <!--<logger name="*" minlevel="Info" writeTo="syslog" />-->
      <logger name="*" minlevel="Error" writeTo="mailBuffer" />
      <logger name="*" minlevel="Info" writeTo="database" />
   </rules>
</nlog>

nlog-internal.log:

在属性上设置“${appsetting:Mail.Ssl.Enabled}”时出错 “enableSsl”异常:NLog.NLogConfigurationException:错误时 在邮件目标 [mail] 上设置属性“EnableSsl”---> System.FormatException: ${appsetting:Mail.Ssl.Enabled} 无效 布尔值。 ---> System.FormatException:字符串不是 被识别为有效的布尔值。 在 System.Boolean.Parse(字符串值) 在 System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext 上下文、CultureInfo 文化、对象值) --- 内部异常堆栈跟踪结束 --- 在 System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext 上下文、CultureInfo 文化、对象值) 在 NLog.Internal.PropertyHelper.TryTypeConverterConversion(类型类型,字符串值,对象和新值) 在 NLog.Internal.PropertyHelper.SetPropertyFromString(对象 obj,字符串 propertyName,字符串值,ConfigurationItemFactory 配置项目工厂) --- 内部异常堆栈跟踪结束 --- 在 NLog.Internal.PropertyHelper.SetPropertyFromString(对象 obj,字符串 propertyName,字符串值,ConfigurationItemFactory 配置项目工厂) 在 NLog.Config.LoggingConfigurationParser.ConfigureObjectFromAttributes(对象 targetObject, ILoggingConfigurationElement 元素,布尔值 忽略类型)

【问题讨论】:

  • System.FormatException: String was not recognized as a valid Boolean 显示您问题的答案,您应该将其转换为布尔值

标签: c# asp.net email logging nlog


【解决方案1】:

enableSsl 不是Layout 类型,而是boolean 类型。 (见docs)。

这意味着它是不可布局的,因此您不能为这个值使用布局渲染器。

您可以(作为例外)配置中的变量,因为这些变量在读取配置时是内联的。例如

<variable name="myvar" value="true" /> 
...
<target name="mail" xsi:type="Mail" enableSsl="${myvar}" ../>

如果您需要动态更改配置,则需要一些代码。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 2018-08-24
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多