Ошибка регистрации в C#
-
02-07-2019 - |
Вопрос
Я перехожу с программирования на C++ на C#.Мне нужно заменить мою макросистему регистрации/отчетов об ошибках C++ чем-то похожим на C#.
В моем исходном коде C++ я могу написать
LOGERR("Некоторая ошибка");или logerr («ошибка с входами %s и %d», Stringvar, Intvar);
Затем макрос и код вспомогательной библиотеки передают отформатированное сообщение (возможно, с переменными аргументами) в базу данных вместе с исходным файлом, исходной строкой, именем пользователя и временем.Те же данные также помещаются в структуру данных для последующего отчета пользователю.
Есть ли у кого-нибудь фрагменты кода C# или указатели на примеры, которые выполняют эту базовую отчетность/регистрацию ошибок?
Редактировать: В то время, когда я задавал этот вопрос, я был новичком в .NET и не знал о System.Diagnostics.Trace.System.Diagnostics.Trace — это то, что мне было нужно на тот момент.С тех пор я использовал log4net в проектах, где требования к ведению журналов были больше и сложнее.Просто отредактируйте этот файл конфигурации XML из 500 строк, и log4net сделает все, что вам понадобится :)
Решение
Здесь много сторонников log4net, поэтому я уверен, что это будет проигнорировано, но я добавлю свои собственные предпочтения:
System.Diagnostics.Trace
Сюда входят слушатели, которые слушают ваши Trace()
методы, а затем записать в файл журнала/окно вывода/журнал событий, те из них, которые включены в структуру, включают DefaultTraceListener
, TextWriterTraceListener
и EventLogTraceListener
.Он позволяет вам указать уровни (Предупреждение, Ошибка, Информация) и категории.
Класс трассировки в MSDN
Запись в журнал событий в веб-приложении
UdpTraceListener — запись XML-сообщений, совместимых с log4net, в программу просмотра журналов, например log2console.
Другие советы
Еще одна хорошая библиотека журналирования: Нлог, который может записываться во множество разных мест, таких как файлы, базы данных, регистратор событий и т. д.
я использую Платформа ведения журналов Object Guy- как и большинство людей, которые это пробуют.У этого парня есть кое-что интересное Комментарии об этом.
Корпоративная библиотека является надежной альтернативой log4net а также предлагает множество других возможностей (кэширование, обработка исключений, проверка и т. д.).Я использую его практически в каждом проекте, который создаю.
Настоятельно рекомендуется.
Хоть я лично и ненавижу это, log4net кажется, это стандарт де-факто для ведения журнала C#.Пример использования:
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
Как я уже говорил в другой теме, мы использовали Платформа ведения журналов Object Guy в нескольких производственных приложениях в течение нескольких лет.Его очень легко использовать и расширять.
Лог4Нет представляет собой довольно комплексную структуру ведения журналов, которая позволит вам вести журнал на разных уровнях (отладка, ошибка, фатальный) и выводить эти операторы журнала в разные места (скользящий файл, веб-служба, ошибки Windows).
Я могу легко войти в систему где угодно, создав экземпляр регистратора.
private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));
а затем зарегистрировать ошибку.
_log.Error("Error messsage", ex);
Серилог опаздывает на вечеринку, но предлагает несколько интересных вариантов.Это очень похоже на использование классических текстовых логгеров:
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 кажутся довольно популярными среди домашних мастеров.Изначально я создал Serilog (хотя это проект сообщества), а сейчас работаю над продуктом под названием сек., который обеспечивает хранение и запрос таких событий структурированного журнала.
Вы можете использовать встроенное ведение журнала .NET.Посмотрите TraceSource и TraceListeners, их можно настроить в файле .config.
То же самое для log4net.Я добавляю свои два бита, потому что для реального использования имеет смысл взглянуть на некоторые реализации с открытым исходным кодом, чтобы увидеть примеры реального кода с некоторыми удобными дополнениями.Что касается log4net, я бы посоветовал сразу взглянуть на подтекст.Особое внимание обратите на биты запуска приложения и информации о сборке.
В дополнение к паре комментариев, касающихся использования методов System.Diagnostics для журналирования, я также хотел бы отметить, что Дебагвиев Инструмент очень удобен для проверки вывода отладки, когда это необходимо - если вам это не требуется, приложениям не нужно создавать файл журнала, вы просто запускаете DebugView по мере необходимости.
Встроенная трассировка в System.Diagnostics отлично работает в .NET Framework, и я использую ее во многих приложениях.Однако одна из основных причин, по которой я до сих пор использую log4net, заключается в том, что встроенной трассировке .NET Framework не хватает многих полезных полнофункциональных приложений, которые уже встроены в log4net.
Например, в .NET Framework не существует хорошего прослушивателя трассировки файлов, кроме того, что есть в VB.NET dll, который на самом деле не так уж и полнофункционален.
В зависимости от вашей среды разработки я бы рекомендовал использовать log4net, если сторонние инструменты недоступны, тогда я бы посоветовал использовать классы трассировки System.Diagnostics.Если вам действительно нужен лучший аппендер/прослушиватель трассировки, вы всегда можете реализовать его самостоятельно.
Например, многие из наших клиентов требуют, чтобы мы не использовали библиотеки с открытым исходным кодом при установке на их корпоративных компьютерах, поэтому в этом случае классы трассировки .NET Framework идеально подходят.
Кроме того - http://www.postsharp.org/ это библиотека АОП, которую я изучаю, которая также может помочь в регистрации, как показано здесь в проекте кода:http://www.codeproject.com/KB/dotnet/log4postsharp-intro.aspx.
ExceptionLess — один из самых простых пакетов nuget, доступных для ведения журналов.Это Открытый исходный код проект.Он автоматически заботится о необработанных исключениях и опциях для вручную регистрирует доступны.Вы можете войти в систему онлайн или сам хозяин на локальном сервере.
Log4Net, как говорили другие, довольно распространен и похож на Log4j, который поможет вам, если вы когда-нибудь будете использовать Java.
У вас также есть возможность использовать блок приложения для ведения журнала. http://www.codeproject.com/KB/architecture/GetStartedLoggingBlock.aspx