NLog - использование appSetting для EnableSsl в почтовом разделе не работает - PullRequest
1 голос
/ 05 июля 2019

Я использую nlog для отслеживания ошибок по электронной почте - вся конфигурация хранится в web.config.Я пытаюсь использовать appSetting для ключа enableSsl в разделе почты nlog, но он не учитывается для этого конкретного ключа (но он отлично работает для других ключей, таких как: 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} 'наattibute 'enableSsl' Исключение: NLog.NLogConfigurationException: Ошибка при установке свойства 'EnableSsl' для цели почты [mail] ---> System.FormatException: $ {appsetting: Mail.Ssl.Enabled} не является допустимым значением для логического значения.---> System.FormatException: строка не была распознана как допустимое логическое значение.в System.Boolean.Parse (значение String) в System.ComponentModel.BooleanConverter.ConvertFrom (контекст ITypeDescriptorContext, CultureInfo culture, значение объекта) --- Конец внутренней трассировки стека исключений --- в System.ComponentModel.BooleanConverter.ConvertFrom (ITypeDescriptor)контекст, культура CultureInfo, значение объекта) в NLog.Internal.PropertyHelper.TryTypeConverterConversion (тип типа, строковое значение, объект & newValue) в NLog.Internal.PropertyHelper.SetPropertyFromString (объектный объект, строковое свойствоName, строковое значение, конфигурацияItemFactory); конфигурацияItemFactory)Конец трассировки стека внутренней исключительной ситуации --- в NLog.Internal.PropertyHelper.SetPropertyFromString (Object obj, String propertyName, Строковое значение, ConfigurationItemFactory configurationItemFactory) в NLog.Config.LoggingConfigurationParser.ConfigureObjectFromAttributes*

1 Ответ

1 голос
/ 05 июля 2019

enableSsl относится не к типу Layout, а к типу boolean. (см. документы ).

Это означает, что он не является слоистым, и поэтому вы не можете использовать средства визуализации макета для этого значения.

Вы можете (как исключение) переменные в конфигурации, так как они встроены при чтении конфигурации. например,

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

Если вам нужно изменить конфигурацию динамически, вам нужен код.

...