Ошибка входа в C # - PullRequest
       132

Ошибка входа в C #

73 голосов
/ 29 сентября 2008

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

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

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

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

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

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

Ответы [ 15 ]

72 голосов
/ 29 сентября 2008

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

System.Diagnostics.Trace

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

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

41 голосов
/ 29 сентября 2008

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

15 голосов
/ 29 сентября 2008

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

14 голосов
/ 08 февраля 2009

Я использую Инфраструктура ведения журнала Object Guy - как и большинство людей, которые пробуют это. У этого парня есть несколько интересных комментариев об этом.

11 голосов
/ 29 сентября 2008

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

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

5 голосов
/ 11 августа 2009

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

5 голосов
/ 29 сентября 2008

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

log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Error(“Some error”);
log.ErrorFormat("Error with inputs {0} and {1}", stringvar, intvar);
3 голосов
/ 23 марта 2014

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 , который обеспечивает хранение и запросы таких структурированных событий журнала.

3 голосов
/ 29 сентября 2008

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

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

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

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

_log.Error("Error messsage", ex);
2 голосов
/ 29 сентября 2008

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

...