Что лучший способ состоит в том, чтобы записать записям журнала событий?

(Ответ отправлен от имени OP) .

Обновление: разрешено.

Я создал файл python для одного из моих имен проектов random.py и когда numpy импортирован, он вызывал этот файл вместо собственного файла библиотеки, что приводило к ошибке. Мне пришлось удалить / переименовать random.py, который я создал, и устранил проблему.

14
задан Treb 11 March 2009 в 15:34
поделиться

6 ответов

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

, Но почему Вы пишете свой код входа сами так или иначе? Используйте платформу как NLog или Log4Net! Они также глотают исключения как, я просто сказал, но можно перенаправить вывод входа к другому местоположению (файл, messagebox и т.д.) только с изменением конфигурации. Это делает проблемы решения как это намного легче.

2
ответ дан 1 December 2019 в 12:40
поделиться
System.Diagnostics.EventLog log = 
    new System.Diagnostics.EventLog("YourLogNameHere");
log.ModifyOverflowPolicy(
    System.Diagnostics.OverflowAction.OverwriteAsNeeded, 0);

Это должно решить Вашу водосливную проблему. Журнал событий обычно чрезвычайно надежен, после того как он настроен правильно. При использовании журнала событий я раньше добавлял быстрый аварийный резервный регистратор, который просто записал в текстовый файл (это занимает приблизительно 5 минут для записи). Это никогда не называли.

4
ответ дан 1 December 2019 в 12:40
поделиться

Вы не можете только использовать механизм журнала событий по умолчанию, который уже обеспечивает класс ServiceBase? Если Ваш сервис не запускается, который автоматически запишет запись в журнал событий, указывая так (с stacktrace).

Кроме этого, и относительно комментариев о log4net (или любые другие максимальные усилия как система регистрации), я думаю, что это действительно зависит, чего Вы пытаетесь достигнуть.

В Вашем примере с помощью log4net (или встроенная поддержка eventlogging ServiceBase), скорее всего, в порядке.

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

Так, иногда необходимо знать, когда регистрирующаяся попытка перестала работать и дескриптор это отдельно. Существуют пределы этому, конечно (проблема куриного яйца), и что Вы делаете очень характерно для конкретного приложения или сценария.

3
ответ дан 1 December 2019 в 12:40
поделиться

Используйте log4net

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

, Если Вы регистрировались к журналу событий и видели проблемы и никакие записи журнала событий, Вы, возможно, всегда переключались на журнал файла-appender и видели, что он работает..., который затем сказал бы Вам, что это было что-то, чтобы сделать с журналом событий.

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

ключевой бит в log4net документации - это:

[log4net] система регистрации остановки сбоя и максимальные усилия.

остановкой сбоя, мы подразумеваем, что log4net не бросит непредвиденные исключительные ситуации во время выполнения, потенциально заставляющее Ваше приложение отказать . Если по какой-либо причине, log4net выдает неперехваченное исключение (за исключением ArgumentException и ArgumentNullException, который может быть брошен), пошлите электронное письмо списку рассылки log4net-user@logging.apache.org. Неперехваченные исключения обработаны как серьезные ошибки, требующие пристального внимания.

, Кроме того, log4net не вернется к Системе. Консоль. Или Система. Консоль. Ошибка, когда ее обозначенный поток вывода не открыт, не перезаписываема или становится полной. Это старается не повреждать в других отношениях рабочую программу путем лавинной рассылки терминала пользователя, потому что вход перестал работать. Однако log4net произведет единственное сообщение к Системе. Консоль. Ошибка и Система. Диагностика. Трассировка, указывающая, что вход не может быть выполнен.

(мой акцент)

Для большинства вещей, существует библиотека, которая делает это лучше, чем Вы будете. Лучшая вещь никогда не состоит в том, чтобы переосмысливать, log4net решает входящий в систему .NET и сделает Вашу жизнь легче.

11
ответ дан 1 December 2019 в 12:40
поделиться

Изучите использование Регистрирующийся Блок приложений .

Библиотека Предприятия, Регистрирующая Блок приложений, упрощает реализацию общих функций входа. Разработчики могут использовать Регистрирующийся Блок для записи информации во множество местоположений:

  • журнал событий
  • электронное письмо
  • база данных
  • очередь сообщений А
  • текстовый файл А
  • событие
  • WMI А Пользовательские местоположения с помощью точек расширения блока приложений
2
ответ дан 1 December 2019 в 12:40
поделиться

Давайте сделаем шаг назад:

Журнал системных событий предназначен для того, чтобы предупредить системного администратора о том, что в системе возникла проблема. Вы должны разрешить запуск службы сбой. Это будет отображаться в журнале системных ошибок с сообщенным источником «Service Control Manager». Это означает, что системный администратор будет знать об ошибке.

Затем, если вам нужно устранить неполадки, вы должны записывать исключения в файл на диске на верхнем уровне вашей программы. Вы также должны сбросить их повторно, чтобы запустить службу не удалось.

Затем вы можете идентифицировать любые проблемы в журналах системных событий и перекрестно ссылаться на время сбоя в журналы приложений.

0
ответ дан 1 December 2019 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: