Рекомендации по ведению журнала [закрыто]



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



рамки



какие фреймворки вы используете?




  • log4net

693   10  

10 ответов:


обновление: для расширения системы.Диагностика, предоставляющая некоторые из отсутствующих прослушивателей, которые вам могут понадобиться, см. раздел Essential.Диагностика на CodePlex (http://essentialdiagnostics.codeplex.com/)


рамки

Q: какие рамки вы используете?

A: Система.Диагностика.TraceSource, встроенный в .NET 2.0.

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

вместо того, чтобы изменить способ добавления операторов регистрации в приложение и повторного изобретения колеса, просто расширил систему.Рамки диагностики в немногих местах вам это нужно.

особенности вы, возможно, не знали:

  • использование перегрузок TraceEvent, которые принимают строку формата и args, может помочь производительности, поскольку параметры хранятся как отдельные ссылки до фильтра.ShouldTrace () преуспел. Это означает, что никакие дорогостоящие вызовы ToString () по значениям параметров до тех пор, пока система не подтвердит, что сообщение действительно будет зарегистрировано.
  • След.CorrelationManager позволяет сопоставлять операторы журнала об одной и той же логической операции (см. ниже).
  • VisualBasic.Лесозаготовительный.FileLogTraceListener хорошо подходит для записи в Файлы журнала и поддерживает вращение файлов. Хотя в пространстве имен VisualBasic его можно так же легко использовать в проекте C# (или на другом языке), просто включив DLL.
  • при использовании EventLogTraceListener если вы вызываете TraceEvent с несколькими аргументами и с пустой или нулевой строкой формата, то args передаются непосредственно в журнал событий.WriteEntry (), если вы используете локализованные ресурсы сообщений.
  • Средство просмотра трассировки службы (из WCF) полезно для просмотра графиков коррелированных файлов журнала активности (даже если вы не используете WCF). Это действительно может помочь отладить сложные проблемы, в которых участвуют несколько потоков/действий.
  • избежать накладных расходов, очистив все слушатели (или удаление по умолчанию); в противном случае по умолчанию будет передайте все в систему трассировки (и понесите все эти накладные расходы ToString ()).

области, которые вы можете посмотреть на расширение (при необходимости):

  • прослушиватель трассировки базы данных
  • цветной прослушиватель трассировки консоли
  • прослушиватели трассировки MSMQ / Email / WMI (при необходимости)
  • реализовать FileSystemWatcher для вызова трассировки.Обновление для динамических изменений конфигурации

другой Рекомендации:

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

наличие уникальных идентификаторов событий для каждого (значимого) события в вашей системе очень полезно для корреляции и поиска конкретных проблем. Легко отследить конкретный код, который регистрирует / использует идентификаторы событий, и может упростить предоставление рекомендаций для распространенных ошибок, например ошибка 5178 означает, что строка подключения к базе данных неверна, так далее.

идентификаторы событий должны следовать какой-то структуре (аналогичной теории кодов ответа, используемых в электронной почте и HTTP), что позволяет обрабатывать их по категориям, не зная конкретных кодов.

вторая цифра может детализировать область, например 21xx для информации о базе данных (41xx для предупреждений базы данных, 51xx для ошибок базы данных), 22xx для режима расчета (42xx для предупреждений расчета и т. д.), 23xx для другого модуля и т. д.

назначенные, структурированные идентификаторы событий также позволяют использовать их в фильтрах.

Q: если вы используете трассировку, вы используете трассировку.Соотношение.StartLogicalOperation?

A: Трассировка.CorrelationManager очень полезен для корреляции операторов журнала в любом своего рода многопоточная среда (которая в наши дни почти ничего).

вам нужно, по крайней мере, установить ActivityId один раз для каждой логической операции, чтобы коррелировать.

Start / Stop и LogicalOperationStack можно использовать для простого контекста на основе стека. Для более сложных контекстов (например, асинхронных операций) использование TraceTransfer для нового ActivityId (до его изменения) позволяет корреляцию.

Средство просмотра трассировки службы может быть полезно для просмотра графиков активности (даже если вы не используете WCF).

Q: вы пишете этот код вручную, или вы используете какую-то форму аспектно-ориентированного программирования, чтобы сделать это? Не хотите поделиться фрагментом кода?

A: вы можете создать класс scope, например LogicalOperationScope, который (a) устанавливает контекст при создании и (b) сбрасывает контекст при удалении.

Это позволяет автоматически писать код, например, следующий операции обертывания:

  using( LogicalOperationScope operation = new LogicalOperationScope("Operation") )
  {
    // .. do work here
  }

при создании область может сначала установить ActivityId, если это необходимо, вызвать StartLogicalOperation, а затем войти в TraceEventType.Начните сообщение. На Dispose он может зарегистрировать сообщение об остановке, а затем вызвать StopLogicalOperation.

Q: вы обеспечиваете любую форму детализации над источниками трассировки? Например, WPF TraceSources позволяют настраивать их на различных уровнях.

а: да, Множественные источники трассировки полезны / важны по мере того как системы получают больше.

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

вместо того, чтобы иметь только один переключатель, который включает или выключает все это, полезно иметь возможность включать эту информацию для одного раздела вашей системы за раз.

таким образом, Вы сможете найти значительные проблемы из обычного ведения журнала (все предупреждения, ошибки и т. д.), а затем "увеличить" на нужные разделы и установить их на трассировку активности или даже уровни отладки.

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

Если вам нужен еще более точный контроль, добавьте отдельные логические переключатели для включения/выключения конкретной трассировки большого объема, например, необработанные дампы сообщений. (Или можно использовать отдельный источник трассировки, аналогичный WCF / WPF).

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

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


слушатель

Q: какие выходы журнала вы делаете использовать?

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

Я обычно классифицирую выходы на три группы:

(1) события - журнал событий Windows (и файлы трассировки)

например, если вы пишете сервер / службу, то лучше всего использовать журнал событий Windows (у вас нет пользовательского интерфейса для отчета).

в этом случае все фатальные, ошибки, предупреждения и (уровень обслуживания) информационные события должны перейти в журнал событий Windows. Уровень информации должен быть зарезервирован для этих типов событий высокого уровня, тех, которые вы хотите включить в журнал событий, например "Служба запущена", "служба остановлена", "подключена к Xyz" и, возможно, даже "расписание инициировано", "пользователь вошел в систему" и т. д.

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

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

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

т. е. если пользователь видит сообщение об ошибке в определенное время, вы должны быть в состоянии найти то же сообщение об ошибке в журнале событий Windows, а затем то же событие с той же меткой времени в журнале трассировки (наряду с другими деталями трассировки).

(2) деятельность - Файлы журнала приложений или таблицы базы данных (и трассировки файлы)

это регулярные занятия, что система делает, например, веб-страница, на фондовом рынке торговля подал, заказ приняли, расчета и т. д.

трассировка активности (начало, остановка и т. д.) полезна здесь (в правой гранулярности).

кроме того, очень часто используется определенный журнал приложений (иногда называемый журналом аудита). Обычно это таблица базы данных или файл журнала приложений и содержит структурированные данные (т. е. набор полы.)

здесь все может немного размыться в зависимости от вашего приложения. Хорошим примером может быть веб-сервер, который записывает каждый запрос в веб-журнал; аналогичные примеры могут быть системой обмена сообщениями или системой вычисления, где каждая операция регистрируется вместе с деталями приложения.

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

а также пользовательские журналы приложений, действия также часто имеют связанные счетчики peformance, например, количество транзакций в секунду.

В общем случае вы должны координировать ведение журнала действий в разных системах, т. е. записывать в журнал приложений одновременно с увеличением счетчика производительности и регистрироваться в системе трассировки. Если вы делаете все одновременно (или прямо после друг друга в коде), то проблемы отладки проще (чем если бы они все происходили в разное время/местах в коде).

(3) отладка трассировки - текстовый файл, или, возможно, XML или базы данных.

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

Это уровень вы хотите иметь возможность включить/выключить для отдельных разделов вашего приложения (отсюда и несколько источников). Вы не хотите, чтобы этот материал загромождал журнал событий Windows. Иногда используется база данных, но более вероятно, что это файлы журнала rolling, которые очищаются через определенное время.

большая разница между этой информацией и файлом журнала приложений заключается в том, что он неструктурирован. В то время как журнал приложений может иметь поля для To, From, Amount и т. д., Подробные трассировки отладки могут быть тем, что программист вставляет, например "проверка значений X={value}, Y=false "или случайные комментарии/маркеры, такие как"сделано, повторите попытку".

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

Если вы планируете использовать определенный просмотрщик журналов, потому что у вас сложная корреляция, например трассировка службы Просмотрщик, то вам нужно использовать соответствующий формат, т. е. XML. В противном случае простой текстовый файл обычно достаточно хорош-на более низких уровнях информация в основном неструктурирована, поэтому вы можете найти дампы массивов, дампы стека и т. д. При условии, что вы можете коррелировать с более структурированными журналами на более высоких уровнях, все должно быть в порядке.

Q: при использовании файлов, вы используете прокатки журналов или только один файл? Как сделать журналы для потреблять?

A: для файлов, как правило, вы хотите прокатки файлов журнала с точки зрения управляемости (с системой.Диагностика просто использует VisualBasic.Лесозаготовительный.FileLogTraceListener).

доступность снова зависит от системы. Если вы говорите только о файлах, то для сервера / службы, прокатные файлы могут быть доступны только в случае необходимости. (Журнал событий Windows или журналы приложений базы данных будут иметь свои собственные механизмы доступа).

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

одно интересное решение, которое я видел для приложения с графическим интерфейсом Windows, состояло в том, что он записывал очень подробную информацию о трассировке на "бортовой самописец" во время работы, а затем, когда вы его выключили, если у него не было проблем, он просто удалил файл.

Если, однако, он разбился или возникла проблема, то файл не был удален. Либо если он ловит ошибка, или при следующем запуске он заметит файл, а затем он может принять меры, например, сжать его (например, 7zip) и отправить его по электронной почте или иным образом сделать доступным.

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


просмотр

Q: какие инструменты вы используете для просмотра журналов?

A: если у вас есть несколько журналов для разных причины тогда вы будете использовать несколько зрителей.

Notepad / vi / Notepad++ или любой другой текстовый редактор является основным для простых текстовых журналов.

Если у вас есть сложные операции, например, действия с переносами, то вы, очевидно, будете использовать специализированный инструмент, такой как средство просмотра трассировки службы. (Но если вам это не нужно, то текстовый редактор проще).

поскольку я обычно регистрирую информацию высокого уровня в журнале событий Windows, то он обеспечивает быстрый способ получить обзор, в структурированный способ (ищите красивые значки ошибок/предупреждений). Вам нужно только начать поиск по текстовым файлам, если их недостаточно в журнале, хотя по крайней мере журнал дает вам отправную точку. (На этом этапе, убедившись, что ваши журналы имеют скоординированные целые становится полезным).

Как правило, журнал событий Windows также делает эти важные события доступными для инструментов мониторинга, таких как MOM или OpenView.

другие --

Если вы входите в База данных это может быть легко фильтровать и сортировать информацию (например, увеличить на определенном идентификаторе активности. (С текстовыми файлами вы можете использовать Grep/PowerShell или аналогичный фильтр на partiular GUID, который вы хотите)

MS Excel (или другая электронная таблица). Это может быть полезно для анализа структурированной и полуструктурированной информации, если вы можете импортировать его с нужными разделителями, так что разные значения в разных столбцах.

при запуске службы в debug / test я обычно размещаю ее в консольном приложении для простоты я нахожу полезным цветной консольный регистратор (например, красный для ошибок, желтый для предупреждений и т. д.). Необходимо реализовать пользовательский прослушиватель трассировки.

меня действительно раздражает, что несколько фреймворков (log4net, EntLib и т. д.) потратили время на повторное изобретение колеса и повторно реализованы основные лесозаготовки, фильтрации и лесозаготовки в текстовые файлы, журнал событий Windows, и XML-файлы, каждый по-своему разный путь (журнал заявлений отличаются в каждой), каждая из которых затем реализовали свои собственные версии, например, база данных регистратора, когда большинство из того, что уже существует и все, что было необходимо несколько прослушивателей трассировки для системы.Диагностика. Говорите о большой трате дублирующих усилий.

Q: если вы строите ASP.NET решение, Вы тоже использование ASP.NET мониторинг состояния здоровья? Вы включаете вывод трассировки в события монитора работоспособности? А как же Трейс?классов AXD?

эти вещи могут быть включены/выключены по мере необходимости. Я нахожу след.axd весьма полезен для отладки того, как сервер реагирует на определенные вещи, но обычно он не полезен в сильно используемой среде или для долгосрочной трассировки.

Q: Как насчет пользовательских счетчиков производительности?

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

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

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

Я должен присоединиться к хору, рекомендующему log4net, в моем случае исходя из гибкости платформы (desktop .Net/Compact Framework, 32/64-bit).

однако, обертывание его в API private-label - это большой противолодочный шаблон. log4net.ILogger является .Net-аналогом Commons Logging фантик API уже, поэтому соединение уже сведено к минимуму для вас, и поскольку это также библиотека Apache, это обычно даже не вызывает беспокойства потому что вы не отказываетесь от любого контроля: вилка его, если вы должны.

большинство библиотек обертки дома, которые я видел, также совершают одну или несколько ошибок:

  1. использование глобального одноэлементного регистратора (или, что то же самое, статическая точка входа), которая теряет точное разрешение рекомендуемого logger-per-class pattern для увеличения селективности.
  2. Не удается выставить необязательный Exception аргумент, что приводит к многочисленным проблемам:
    • это делает политику регистрации исключений еще более трудной для поддержания, поэтому ничего не делается последовательно с исключениями.
    • даже при согласованной политике форматирование исключения в строку преждевременно теряет данные. Я написал обычай ILayout декоратор, который выполняет детальную детализацию по исключению для определения цепочки событий.
  3. Не подвергайте IsLevelEnabled свойства, который отменяет возможность пропускать код форматирования, Когда области или уровни ведения журнала отключены.

Я не часто развиваюсь в asp.net однако, когда дело доходит до лесорубов, я думаю, что многие лучшие практики универсальны. Вот некоторые из моих случайных мыслей о регистрации, которые я узнал за эти годы:

рамки

  • используйте фреймворк абстракции logger-подобный slf4j (или сверните свой собственный), чтобы вы отделили реализацию logger от своего API. Я видел несколько фреймворков logger, которые приходят и уходят, и вам лучше принять новый без особых хлопот.
  • попробуйте найти фреймворк, который поддерживает различные форматы вывода.
  • попробуйте найти фреймворк, который поддерживает плагины / пользовательские фильтры.
  • используйте фреймворк, который может быть настроен внешними файлами, чтобы ваши клиенты / потребители могли легко настроить вывод журнала, чтобы его можно было легко читать коммерческими приложениями управления журналами.
  • убедитесь, что вы не переборщили с пользовательскими уровнями ведения журнала, иначе вы можете не быть возможность перехода к различным фреймворкам ведения журнала.

Выход Регистратора

  • старайтесь избегать журналов стиля XML/RSS для ведения журнала, которые могут столкнуться с катастрофическими сбоями. Это важно, потому что если выключатель питания отключен без вашего регистратора записи закрытия </xxx> тег, ваш журнал-это сломанный.
  • темы журнала. В противном случае, это может быть очень трудно отслеживать поток вашей программы.
  • если вам нужно интернационализировать свои журналы, вы можете хотите, чтобы разработчик регистрировался только на английском языке (или на вашем языке выбора).
  • иногда возможность вставлять операторы ведения журнала в SQL-запросы может быть спасением в ситуациях отладки. Например:
    -- Invoking Class: com.foocorp.foopackage.FooClass:9021
    SELECT * FROM foo;
  • вы хотите ведение журнала на уровне класса. Обычно вам не нужны статические экземпляры регистраторов, а также-это не стоит микро-оптимизации.
  • маркировка и категоризация зарегистрированных исключений иногда полезны, потому что не все исключения создаются равными. Таким образом, зная подмножество важных исключений, голова времени полезна, если у вас есть монитор журнала, который должен отправлять уведомления о критических состояниях.
  • фильтры дублирования сохранят ваше зрение и жесткий диск. Вы действительно хотите, чтобы один и тот же оператор регистрации повторялся 10^10000000 раз? Не было бы лучше просто получить сообщение: This is my logging statement - Repeated 100 times

см. Также этот вопрос.

Я не имею права комментировать ведение журнала для .Net, так как мой хлеб и масло-это Java, но у нас была миграция в нашем журнале За последние 8 лет, вы можете найти полезную аналогию с вашим вопросом.

мы начали с Одноэлементного регистратора, который использовался каждым потоком в JVM, и установили уровень ведения журнала для всего процесса. Это привело к огромным журналам, если нам пришлось отлаживать даже очень конкретную часть системы, поэтому урок номер один-сегментировать ваш лесозаготовительный.

наше текущее воплощение регистратора позволяет использовать несколько экземпляров с одним, определенным по умолчанию. Мы можем создать любое количество дочерних логгеров, которые имеют разные уровни ведения журнала, но наиболее полезным аспектом этой архитектуры является возможность создавать логгеры для отдельных пакетов и классов, просто изменяя свойства ведения журнала. Урок номер два заключается в создании гибкой системы, которая позволяет переопределять ее поведение без изменения кода.

мы использование библиотеки Apache commons-logging, обернутой вокруг Log4J.

надеюсь, что это помогает!

* Edit*

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

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

мы выбрали его по следующим причинам:

  • простая конфигурация / реконфигурация в различных средах
  • хорошее количество готовых приложений
  • один из CMS, которые мы используем, уже был встроен
  • хорошее количество уровней журнала и конфигурации вокруг них

Я должен упомянуть, что это говорит от Ан ASP.NET точка зрения развития

Я вижу некоторые преимущества в использовании трассировки, которая находится в .NET framework, но я не полностью продан на нем, главным образом потому, что компоненты, с которыми я работаю, на самом деле не выполняют никаких вызовов трассировки. Единственное, что я часто использую, что делает System.Net.Mail от того, что я могу сказать.

Итак, у нас есть библиотека, которая обертывает log4net и внутри наш код нам просто нужны такие вещи:

Logger.Instance.Warn("Something to warn about");
Logger.Instance.Fatal("Something went bad!", new Exception());

try {
  var i = int.Parse("Hello World");
} catch(FormatException, ex) {
  Logger.Instance.Error(ex);
}

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

Logger.Instance.Debug(string.Format("Something to debug at {0}", DateTime.Now);

это станьте:

if(Logger.DebugEnabled) Logger.Instance.Debug(string.Format("Something to debug at {0}", DateTime.Now);

(сэкономить немного времени исполнения)

по умолчанию мы регистрируемся в двух местах:

  1. файловая система сайта (в необслуживаемом расширении файла)
  2. отправка электронной почты для ошибки и фатальной

файлы выполняются как прокатка каждого дня или 10 МБ (IIRC). Мы не используем журнал событий, поскольку он может потребовать более высокой безопасности, чем мы часто хотим дать сайту.

Я нахожу Блокнот работает просто отлично для чтения системный журнал.

какие фреймворки вы используете?

мы используем сочетание блока приложений ведения журнала и пользовательского помощника ведения журнала, который работает вокруг битов .Net framework. Лаборатория настроена для вывода довольно обширных файлов журнала, включающих отдельные общие файлы трассировки для входа/выхода метода службы и конкретные файлы ошибок для непредвиденных проблем. Конфигурация включает дату / время, поток, пид ЕТК. для помощи отладки, а также полной детали исключения и стека (в случай неожиданного исключения).

пользовательский помощник ведения журнала использует трассировку.Корреляция и особенно удобна в контексте входа в WF. Например, у нас есть конечный автомат, который вызывает ряд последовательных рабочих процессов. При каждом из этих действий invoke мы регистрируем начало (используя StartLogicalOperation), а затем в конце останавливаем логическую операцию с обработчиком событий gereric return.

Это оказалось полезным несколько раз при попытке отлаживайте сбои в сложных бизнес-последовательностях, поскольку это позволяет нам определять такие вещи, как решения if / Else и т. д. более быстро на основе последовательности выполнения действия.

какие лог-выходы вы используете?

мы используем текстовые файлы и XML-файлы. Текстовые файлы настраиваются через блок Приложения, но у нас есть выходы XML, а также из нашего сервиса WF. Это позволяет нам фиксировать события времени выполнения (персистентность и т. д.) а также общие исключения типа бизнеса. Текстовые файлы-это прокатные журналы, которые прокатываются по дням и размеру (я считаю, что общий размер 1 МБ-это точка опрокидывания).

какие инструменты вы используете для просмотра журналов?

мы используем Notepad и WCF Service Trace Viewer в зависимости от того, какую выходную группу мы рассматриваем. Средство просмотра трассировки службы WCF действительно очень удобно, если вы правильно настроили вывод и можете сделать чтение вывода намного проще. Тем не менее, если я знаю примерно, где ошибка в любом случае-просто читать хорошо аннотированный текстовый файл тоже хорошо.

журналы отправляются в один каталог, который затем разбивается на суб-dirs на основе исходного сервиса. Корневой каталог отображается через веб-сайт, доступ к которому контролируется группой пользователей поддержки. Это позволяет нам взглянуть на производственные журналы без необходимости вводить запросы и проходить через длительные бюрократические процессы для производственных данных.

как авторы инструмента, мы, конечно, используем SmartInspect для регистрации и трассировки приложений .NET. Обычно мы используем протокол именованного канала для ведения журнала в реальном времени и (зашифрованные) двоичные файлы журнала для журналов конечных пользователей. Мы используем консоль SmartInspect в качестве средства просмотра и мониторинга.

на самом деле существует довольно много фреймворков и инструментов ведения журнала для .NET. Есть обзор и сравнение различных инструментов по DotNetLogging.com.

есть много отличных рекомендаций в ответах.

общая передовая практика заключается в том, чтобы рассмотреть, кто будет читать журнал. В моем случае это будет администратор на клиентском сайте. Поэтому я регистрирую сообщения, которые дают им что-то, на что они могут действовать. Например, " невозможно инициализировать приложение. Обычно это вызвано ......"

мы используем log4net в наших веб-приложениях.

это возможность настроить ведение журнала во время выполнения путем изменения файла конфигурации XML очень удобно, когда приложение работает со сбоями во время выполнения, и вам нужно увидеть дополнительную информацию.

Он также позволяет вам ориентироваться на определенные классы или атрибуты для входа в систему. Это очень удобно, когда у вас есть идея, где возникает ошибка. Классический пример-NHibernate, где вы хотите видеть только SQL, идущий база данных.

Edit:

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

Что касается аспектно-ориентированного ведения журнала, мне было рекомендовано PostSharp по другому вопросу SO -

аспектно-ориентированное ведение журнала с Unity\T4\anything else

ссылка, приведенная в ответе, стоит посетить, если вы оцениваете рамки ведения журнала.

Comments

    Ничего не найдено.