Насколько гибок NLog? Я хочу, чтобы пользовательские свойства макета - PullRequest
5 голосов
/ 19 февраля 2011

Я использую NLog для отправки электронных писем, когда в моем приложении возникает исключение. Вот часть моей цели:

<target xsi:type="Mail"
        name="email"
        subject="${level}:"  .. >

Я получаю электронные письма на такие темы, как «Ошибка:» или «Неустранимый:». Это прекрасно работает, но я хочу добавить Exception.Message к теме письма

Можно ли настроить пользовательские свойства в NLog. Я не могу понять, как это сделать, поэтому просто чтобы прояснить, чего я хочу, вот пример того, что я пытаюсь сделать:

m_oLogger.Fatal( oException.BuildMessage(), new {MyMessage=oException.Message});

* Обратите внимание, что BuildMessage () - это просто метод расширения для преобразования полной информации об исключении (включая внутренние исключения) в читаемую строку

И в моей цели:

<target xsi:type="Mail"
        name="email"
        subject="${level}: ${Custom.MyMessage}"  .. >

Тогда я получу письма с темами вроде:

Fatal: синтаксическая ошибка в параметрах или аргументы. Ответ сервера был: Аккаунт не существует

Возможна ли такая гибкость с NLog? Если нет, знаете ли вы о других платформах журналирования .NET, которые предлагают такую ​​функциональность?

Ответы [ 3 ]

6 голосов
/ 21 июля 2013

В общем, вместо создания пользовательского layoutRenderer, предложенного wageoghe , можно использовать EventContext-Layout-Renderer , который позволяет передавать любое количество пользовательских свойств

LogEventInfo theEvent = new LogEventInfo(LogLevel.Debug, "", "Pass my custom value");
theEvent.Properties["MyValue"] = "My custom string";`

log.Log(theEvent);

и в вашем файле NLog.config:

${event-context:item=MyValue} -- renders "My custom string

Для конкретного https://github.com/nlog/NLog/wiki/Exception-Layout-Renderer формат должен быть

 ${exception:format=message}
5 голосов
/ 21 февраля 2011

Очень легко добавить пользовательский LayoutRenderer в NLog.См. Мой первый ответ на этот вопрос , где приведен пример LayoutRenderer, который позволяет вам добавить значение System.Diagnostics.Trace.CorrelationManager.ActivityId к вашему выходу из журнала.хотите, вам, вероятно, не нужен пользовательский LayoutRenderer.Если вы хотите отправить электронное письмо, тема которого - log leve, плюс свойство Message исключения, вы должны иметь возможность настроить что-то вроде этого:

<target xsi:type="Mail"
            name="email"         
            subject="${level}: ${exception.Message}"  ..>

Это должно создать тему письма путем объединенияуровень и значение свойства Exception.Message.Вам придется вызвать перегрузку журналирования, которая принимает исключение в качестве параметра.

Помогает ли это?

0 голосов
/ 21 февраля 2011

Это, вероятно, нецелесообразно: я вполне уверен, что инфраструктура NLog не имеет отражения как часть своего формата ведения журнала [для этого потребовалось бы, чтобы NLog имел какое-то представление о том, где находятся ваши ссылочные сборки и каковы ихвведите is.]

Можете ли вы просто выполнить весь анализ / форматирование вашего сообщения в коде C # и передать его как часть уже существующих переменных?Многие из них перечислены в документации NLog для Mail-target .

...