(Ответ отправлен от имени OP) .
Обновление: разрешено.
Я создал файл python для одного из моих имен проектов random.py и когда numpy импортирован, он вызывал этот файл вместо собственного файла библиотеки, что приводило к ошибке. Мне пришлось удалить / переименовать random.py, который я создал, и устранил проблему.
Я думаю, регистрируя исключения, один из редких случаев, где Вы - более обеспеченное глотание исключения. В большинстве случаев Вы не хотите, чтобы Ваше приложение перестало работать на этом.
, Но почему Вы пишете свой код входа сами так или иначе? Используйте платформу как NLog или Log4Net! Они также глотают исключения как, я просто сказал, но можно перенаправить вывод входа к другому местоположению (файл, messagebox и т.д.) только с изменением конфигурации. Это делает проблемы решения как это намного легче.
System.Diagnostics.EventLog log =
new System.Diagnostics.EventLog("YourLogNameHere");
log.ModifyOverflowPolicy(
System.Diagnostics.OverflowAction.OverwriteAsNeeded, 0);
Это должно решить Вашу водосливную проблему. Журнал событий обычно чрезвычайно надежен, после того как он настроен правильно. При использовании журнала событий я раньше добавлял быстрый аварийный резервный регистратор, который просто записал в текстовый файл (это занимает приблизительно 5 минут для записи). Это никогда не называли.
Вы не можете только использовать механизм журнала событий по умолчанию, который уже обеспечивает класс ServiceBase? Если Ваш сервис не запускается, который автоматически запишет запись в журнал событий, указывая так (с stacktrace).
Кроме этого, и относительно комментариев о log4net (или любые другие максимальные усилия как система регистрации), я думаю, что это действительно зависит, чего Вы пытаетесь достигнуть.
В Вашем примере с помощью log4net (или встроенная поддержка eventlogging ServiceBase), скорее всего, в порядке.
Однако существуют ситуации, где даже то, что ошибка произошла и что тот факт не мог быть зарегистрирован где-нибудь, является проблемой. Например, примите систему аутентификации или авторизации. Если Вы не можете успешно и надежно зарегистрировать это, скажем, аутентификация по паролю, отказавшая из-за неправильных учетных данных, Вам, возможно, не разрешают продолжить (то же так BTW, если Вы аутентификация по паролю были бы успешны).
Так, иногда необходимо знать, когда регистрирующаяся попытка перестала работать и дескриптор это отдельно. Существуют пределы этому, конечно (проблема куриного яйца), и что Вы делаете очень характерно для конкретного приложения или сценария.
Используйте log4net
, которым преимущество использования log4net состоит в том, что можно проверить вход и управлять им с намного большей гибкостью, чем Вы объясните в рамках своего кода.
, Если Вы регистрировались к журналу событий и видели проблемы и никакие записи журнала событий, Вы, возможно, всегда переключались на журнал файла-appender и видели, что он работает..., который затем сказал бы Вам, что это было что-то, чтобы сделать с журналом событий.
log4net является также защитным, он не разрушит Вашу программу, если он не запишет запись в журнале. Таким образом, Вы не видели бы, что это происходит (таким образом, у Вас не было бы своих файлов журналов, но Ваша программа будет работать, и снова Вы, возможно, указали второй метод входа для получения файлов журнала).
ключевой бит в log4net документации - это:
[log4net] система регистрации остановки сбоя и максимальные усилия.
остановкой сбоя, мы подразумеваем, что log4net не бросит непредвиденные исключительные ситуации во время выполнения, потенциально заставляющее Ваше приложение отказать . Если по какой-либо причине, log4net выдает неперехваченное исключение (за исключением ArgumentException и ArgumentNullException, который может быть брошен), пошлите электронное письмо списку рассылки log4net-user@logging.apache.org. Неперехваченные исключения обработаны как серьезные ошибки, требующие пристального внимания.
, Кроме того, log4net не вернется к Системе. Консоль. Или Система. Консоль. Ошибка, когда ее обозначенный поток вывода не открыт, не перезаписываема или становится полной. Это старается не повреждать в других отношениях рабочую программу путем лавинной рассылки терминала пользователя, потому что вход перестал работать. Однако log4net произведет единственное сообщение к Системе. Консоль. Ошибка и Система. Диагностика. Трассировка, указывающая, что вход не может быть выполнен.
(мой акцент)
Для большинства вещей, существует библиотека, которая делает это лучше, чем Вы будете. Лучшая вещь никогда не состоит в том, чтобы переосмысливать, log4net решает входящий в систему .NET и сделает Вашу жизнь легче.
Изучите использование Регистрирующийся Блок приложений .
Библиотека Предприятия, Регистрирующая Блок приложений, упрощает реализацию общих функций входа. Разработчики могут использовать Регистрирующийся Блок для записи информации во множество местоположений:
- журнал событий
- электронное письмо
- база данных
- очередь сообщений А
- текстовый файл А
- событие
- WMI А Пользовательские местоположения с помощью точек расширения блока приложений
Давайте сделаем шаг назад:
Журнал системных событий предназначен для того, чтобы предупредить системного администратора о том, что в системе возникла проблема. Вы должны разрешить запуск службы сбой. Это будет отображаться в журнале системных ошибок с сообщенным источником «Service Control Manager». Это означает, что системный администратор будет знать об ошибке.
Затем, если вам нужно устранить неполадки, вы должны записывать исключения в файл на диске на верхнем уровне вашей программы. Вы также должны сбросить их повторно, чтобы запустить службу не удалось.
Затем вы можете идентифицировать любые проблемы в журналах системных событий и перекрестно ссылаться на время сбоя в журналы приложений.