Очистка трассировки - PullRequest
2 голосов
/ 21 июня 2011

У меня есть большое приложение (> 50k loc) в C #, использующее NLog для трассировки, и трассировка вышла из-под контроля.Некоторые библиотеки используют правильную трассировку (правильный уровень / подробность), другие просто отправляют все на уровень Error / Info.

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

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

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

1 Ответ

1 голос
/ 22 июня 2011

Это то, что я использую (но я использую log4net, но я думаю, это то же самое)

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

for(a in l) { trace("List contents: "+ a) }

.debug () - это печать 1 (одной) строки информации, полной при рассмотрении ветви. Вы можете иметь несколько операторов отладки в одной функции, но не одну строку pr. Когда вы читаете операторы отладки, он должен читаться как краткая версия
функция.

.debug("Checking if current account {} for user {} has more than {} amount", amount);
.debug("Account criteria met for account {} for user {}; making withdrawel of {}", otheramount);
.debug("Account {} debited by {} amount. Transaction key {}");

Каждая строка отладки должна стоять отдельно и содержать всю информацию, необходимую для ее понимания. Нет смысла читать строку «Проверка уровня аккаунта», потому что следующим вопросом будет какой аккаунт? какой пользователь? какая сумма?

.info () - Максимум 1 или две функции pr и только в области высокого уровня. Данные должны быть полными.

.info("Withdrawel procecss complete for account {}, user {}, for amount {}");

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

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

.fatal () - Должен идти напрямую на пейджер sysadm, если возможно, с информацией о имени сервера / машины.

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

...