Вопрос

Я перехожу с программирования на 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.

Другие советы

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

Еще одна хорошая библиотека журналирования: Нлог, который может записываться во множество разных мест, таких как файлы, базы данных, регистратор событий и т. д.

я использую Платформа ведения журналов 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top