Ошибка регистрации в С#

Я делаю свой переход с кодирования на С++ на С#. Мне нужно заменить мою С++-систему регистрации ошибок/отчетности на что-то подобное на С#.

В моем источнике С++ я могу написать

LOGERR ( "Некоторая ошибка" ); или LOGERR ( "Ошибка с входами% s и% d", stringvar, intvar);

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

Есть ли у кого-нибудь фрагменты кода или указатели кода С# для примеров, которые выполняют эту основную отчетность/протоколирование ошибок?

Изменить: В то время, когда я задал этот вопрос, я был очень знаком с .NET и не знал о System.Diagnostics.Trace. System.Diagnostics.Trace был тем, что мне было нужно в то время. С тех пор я использовал log4net для проектов, где требования к регистрации были больше и сложнее. Просто отредактируйте этот файл конфигурации 500 строк XML, и log4net сделает все, что вам когда-либо понадобится:)

Ответ 1

Здесь много сторонников log4net, поэтому я уверен, что это будет проигнорировано, но я добавлю свои предпочтения:

System.Diagnostics.Trace

Сюда входят слушатели, которые прослушивают ваши методы Trace(), а затем записывают в окно журнала/вывода/журнал событий журнала, в состав которых входят DefaultTraceListener, TextWriterTraceListener и EventLogTraceListener. Он позволяет вам указывать уровни (предупреждение, ошибка, информация) и категории.

Класс трассировки на MSDN
Запись в журнал событий в веб-приложении
UdpTraceListener - записывать совместимые с Log4net XML-сообщения в средство просмотра журналов, такое как log2console

Ответ 2

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

Ответ 3

Другая хорошая библиотека регистрации NLog, которая может регистрироваться в разных местах, таких как файлы, базы данных, регистратор событий и т.д..

Ответ 5

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

Настоятельно рекомендуется.

Ответ 6

Несмотря на то, что я лично ненавижу его, log4net, по-видимому, является стандартом де-факто для ведения журнала С#. Использование примера:

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error("Some error");
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);

Ответ 7

Как я уже сказал в другом потоке, мы используем Object Guy Logging Framework в нескольких производственных приложениях в течение нескольких лет. Он очень прост в использовании и расширяется.

Ответ 8

Log4Net - довольно обширная структура ведения журнала, которая позволит вам регистрироваться на разных уровнях (Debug, Error, Fatal) и выводить эти операторы журналов могут быть разными (скользящий файл, веб-сервис, ошибки Windows)

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

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

а затем регистрирует ошибку.

_log.Error("Error messsage", ex);

Ответ 9

Serilog опаздывает на вечеринку здесь, но приносит некоторые интересные варианты в таблицу. Он очень похож на классических текстовых логгеров:

Log.Information("Hello, {0}", username);

Но, в отличие от предыдущих фреймворков, он только передает сообщение и аргументы в строку при написании текста, например. к файлу или консоли.

Идея заключается в том, что если вы используете хранилище данных типа "NoSQL" для журналов, вы можете записывать такие события, как:

{
    Timestamp: "2014-02-....",
    Message: "Hello, nblumhardt",
    Properties:
    {
        "0": "nblumhardt"
    }
}

Синтаксис строки формата .NET расширен, поэтому вы можете написать приведенный выше пример:

Log.Information("Hello, {Name}", username);

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

Есть уже несколько хороших вариантов для хранения. MongoDB и Azure Table Storage, похоже, довольно популярны для DIY. Я первоначально построил Serilog (хотя это проект сообщества), и теперь я работаю над продуктом под названием Seq, который обеспечивает хранение и запрос этих типов структурированных событий журнала.

Ответ 10

Вы можете использовать встроенную запись в .NET. Просмотрите TraceSource и TraceListeners, их можно настроить в файле .config.

Ответ 11

То же самое для log4net. Я добавляю свои два бита, потому что для фактического использования имеет смысл взглянуть на некоторые реализации с открытым исходным кодом, чтобы увидеть образцы кода реального мира с некоторыми удобными дополнениями. Для log4net я предлагаю с головы до головы subtext. В частности, обратите внимание на биты запуска приложения и assemblyinfo.

Ответ 12

В дополнение к парам комментариев, относящихся к использованию методов System.Diagnostics для ведения журнала, я хотел бы также отметить, что DebugView очень аккуратен для проверки вывода отладки при необходимости - если вы этого не требуете, нет необходимости, чтобы приложения создавали файл журнала, вы просто запускаете DebugView по мере необходимости.

Ответ 13

Встроенная трассировка в System.Diagnostics отлично подходит для .NET Framework, и я использую ее во многих приложениях. Тем не менее, одна из основных причин, по которым я все еще использую log4net, заключается в том, что встроенная трассировка .NET Framework не содержит многих полезных полнофункциональных приложений, которые log4net уже поставляет встраиваемые.

Например, действительно нет хорошего прослушивателя трассировки файла календаря, определенного в .NET Framework, отличном от того, который находится в dll VB.NET, который действительно не так полно.

В зависимости от вашей среды разработки я бы рекомендовал использовать log4net, если сторонние инструменты недоступны, тогда я бы сказал, используя классы отслеживания System.Diagnostics. Если вам действительно нужен лучший appender/tracelistener, вы всегда можете реализовать его самостоятельно.

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

Дополнительно - http://www.postsharp.org/ - это библиотека AOP, которую я ищу, которая также может помочь в регистрации, как показано здесь в проекте кода: http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx.

Ответ 14

ExceptionLess - один из самых простых пакетов nuget, доступных для ведения журнала. Его проект с открытым исходным кодом. Он автоматически выполняет необработанное исключение, и доступны опции журналов вручную. Вы можете войти в онлайн-адрес или собственный хост на локальном сервере.

Ответ 15

Log4Net, как говорили другие, довольно распространен и похож на Log4j, который поможет вам, если вы когда-нибудь создадите Java.

У вас также есть возможность использовать Блок приложений журнала http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx