Ошибка регистрации в С#
Я делаю свой переход с кодирования на С++ на С#. Мне нужно заменить мою С++-систему регистрации ошибок/отчетности на что-то подобное на С#.
В моем источнике С++ я могу написать
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, которая может регистрироваться в разных местах, таких как файлы, базы данных, регистратор событий и т.д..
Ответ 4
Я использую The Object Guy Logging Framework - делают большинство людей, которые его пробовали. Этот парень имеет несколько интересных комментариев об этом.
Ответ 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