Я следующий NLog конфигурации раздела в моем web.config (модифицирована, чтобы показывать только необходимую информацию)Настройка NLog программно web.config
<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="[email protected]" encoding="UTF-8" from="[email protected]" 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="[email protected]" encoding="UTF-8" from="[email protected]" 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.config, то письма отправляются. Я проверил, что значения smtp, которые я использую через код, действительны.
Я просмотрел много похожих вопросов на SO, но я еще не нашел тот, который упоминает решение, которое работает для меня.
EDIT:
На основании ответа Xharze, я позволил исключение, внутреннее протоколирование и я также вывожусь значением цели после того, как я сделал мои изменения. Внутренний журнал показал исключение из MailAdrress
, являющегося неправильным форматом. Поэтому я проверил все целевые значения, которые принимают адрес электронной почты, и я нашел проблему. Свойство from
целевого объекта принимает адрес электронной почты, тогда как я предоставлял ему отображаемое имя!
Не могли бы вы попытаться включить исключения исключения и межобщинный журнал и опубликовать его? Он может предоставить дополнительную информацию. См. Https://github.com/NLog/NLog/wiki/Logging-troubleshooting – Xharze
@Xharze, спасибо помощнику. Сочетание включения исключения, внутреннего ведения журнала и вывода значений цели помогло выявить проблему. В моем производственном коде я устанавливал свойство «From'» объекта для отображения имени вместо фактического из идентификатора электронной почты. В любом случае, если вы можете опубликовать ответ, содержащий содержание вашего комментария, я отмечу это как принятый ответ. –