Как получать события, если log4net перестает регистрировать - PullRequest
3 голосов
/ 06 августа 2009

Log4net слишком хорош, чтобы не выдавать ошибки. Я пытаюсь создать какой-то обработчик, который запускается, если log4net не может запуститься или умирает и больше не может войти.

Мне известно о ключе настроек приложения, чтобы включить внутреннюю отладку log4net (log4net.Internal.Debug). Мне не нужна вся информация отладки все время, только если есть проблема с log4net.

У кого-нибудь есть способ, которым они программно фиксируют и обрабатывают ошибки в log4net?

Ответы [ 4 ]

4 голосов
/ 22 октября 2009

Что-то, что вам может пригодиться, - это создать класс, который реализует IErrorHandler для каждого аппендера, а затем настроить каждого аппендера на использование собственного класса обработки ошибок. Это должно дать вам больше контроля, чем включение log4net.Internal.Debug.

Я только что попробовал, и это работает (обратите внимание, что в моем примере Logger - это log4net logger, определенный в другом месте - цель этого состоит в том, чтобы захватывать ошибки от приложения SMTP и записывать их в файл):

using System;

using log4net.Core;

namespace Test
{
    public class SmtpErrorHandler : IErrorHandler
    {
        public void Error(string message)
        {
            Logger.Log.Error(message);
        }

        public void Error(string message, Exception ex)
        {
            Logger.Log.Error(message, ex);
        }

        public void Error(string message, Exception ex, ErrorCode errorCode)
        {
            Logger.Log.Error(String.Format("{0}{1}Error code: {2}", message, Environment.NewLine, errorCode), ex);
        }
    }
}

Где я настраиваю свой appender (конечно, вы можете сделать это и в конфиге):

emailAppender.ErrorHandler = new SmtpErrorHandler();
0 голосов
/ 06 марта 2013

Если вы используете инструмент мониторинга, такой как SCOM (System Center Operations Manager), вы можете настроить его на мониторинг файлов журналов и оповещать вас, если не было внесено никаких изменений в течение более чем n часов / дней.

0 голосов
/ 22 октября 2009

Мы создали наш собственный класс, который выполняет Logger.Log.Error ... и если возникает исключение или что-то пошло не так, мы записываем исходную ошибку, а также исключение в журнал событий Windows.

При анализе ошибок пользователь должен прислать нам не только лог-файлы, но и журнал событий. Мы создали инструмент, который автоматически экспортирует журналы событий и сжимает их вместе со всеми доступными лог-файлами Log4net в zip-файл.

0 голосов
/ 09 октября 2009

Что ж, log4net сделает это очень трудным для вас, поскольку он (по замыслу) подавляет исключения, которые генерируются во время операций регистрации. Это связано с тем, что производственная система не должна выходить из строя из-за ошибки при форматировании сообщения журнала.

Стоит попробовать использовать очень простые макеты шаблонов, так как иногда это использование элементов% P {XYZ} в макетах шаблонов, которые вызывают проблемы, если соответствующие свойства не установлены должным образом. Если все работает, как и ожидалось, с простым макетом шаблона, вы можете добавлять нужные вещи обратно по одному за раз и посмотреть, сможете ли вы точно определить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...