С# Logging. Что я должен использовать?

Я рассматриваю переход на новое унифицированное решение для ведения журналов для использования в нашей новой линейке продуктов, и я хотел посмотреть, что подумали некоторые люди из Stack Overflow. Нам понадобится ведение журнала для различных приложений: ASP.net, услуги Windows, веб-сервисы, приложения wpf и т.д. Мы только в магазине Windows.

Некоторые из наших требований к решению для регистрации:

1) Управление файлами журнала

- Ability to split files up over a certain size
- Ability to auto archive/delete after certain period of time

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

3) Возможность записи сообщений в журнал событий Windows

- We need to be able to specify where it being written in the event log. 
  It would also be nice if it would automatically create the event log source if it does exist.

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

Ответ 2

Используйте .NET общий журнал. Вы можете позже выбрать конкретного поставщика (NLog, CLog, log4net...) или даже создать собственные.

Ответ 3

И еще один: NLog.

  • Файлы - один файл или несколько, с автоматическое именование файлов и архивирование.
  • Журнал событий - локальная или удаленная база данных - хранить ваши журналы в поддерживаемых базах данных.
  • от .NET Network - с использованием TCP, UDP, Протоколы SOAP, MSMQ
  • Консоль командной строки - включая цветовое кодирование сообщения
  • E-mail - вы можете получать электронной почты, когда ошибки приложения произойти
  • трассировка ASP.NET
  • и многое другое

Ответ 4

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

http://entlib.codeplex.com/

http://entlib.codeplex.com/releases/view/46741

вы можете скачать руководство для разработчиков pdf, у них есть раздел о регистрации (глава 4)

Ответ 5

См. этот вопрос для получения еще одного исчерпывающего ответа: Когда следует использовать Tracing vs Logger.NET, Enterprise Library, log4net или Ukadc.Diagnostics?

Короче говоря, основными доступными базовыми системами ведения журнала являются встроенный блок приложений .NET Framework System.Diagnostics, log4net, NLog и Enterprise Library.

Сравнение этих основных структур доступно по адресу: https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison

1) Управление файлами журнала

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

например. в прошлом я использовал запланированное задание Windows, которое использует robocopy с помощью "/mov/minage X" для перемещения старых файлов в другое место, затем удаляет или что-то еще.

Функция EventSchemaTraceListener, используемая в System.Diagnostics, которую я недавно опубликовал в блоге, имеет параметр LimitedCircularFiles, но не так много поддержки инструмента для просмотра log (они находятся в XML).

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

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

3) Возможность записи сообщений в журнал событий Windows

Опять же, все основные фреймворки поддерживают это, однако я обычно рекомендую, чтобы запись в журнал событий Windows выполнялась напрямую, а не через трассировку.

Одна из проблем - это то, о чем вы спрашивали, для автоматического создания источников.

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

Из-за этого вам действительно нужно добавить EventLogInstaller, чтобы источник был создан во время установки (установка выполняется администратором). После создания любой процесс может затем записать в источник.

Это приводит к моей рекомендации о том, что вам необходимо создать и записать в журнал событий код, чтобы гарантировать, что источник журнала событий тот же. Кроме того, если вы записываете в журнал событий, вы не хотите, чтобы он "отключил его" через неправильную конфигурацию.

Моя личная рекомендация относится к утилите .NET Framework System.Diagnostics, в частности Service Trace Viewer отлично подходит для диагностики проблем, особенно в многоуровневых многопоточных средах, если используется WCF, где она может проходить корреляцию идентифицирует разные уровни.

Ответ 6

Вы можете создать свой собственный журнал регистрации... Я сделал.

Взгляните на PostSharp http://www.sharpcrafters.com/, они имеют очень хорошие примеры некоторых базовых систем ведения журнала.

Ответ 7

http://alexworx.github.io/ALox-Logging-Library/

- довольно простая библиотека, которая отлична, если у вас высокие требования к производительности.