Настройте log4net appenders для создания файла для каждого свойства контекста или уровня стека контекста? - PullRequest
0 голосов
/ 28 апреля 2011

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

Мне трудно понять, как заставить log4net сделать это или даже поддерживает ли он это.

ОтFAQ по Log4Net - Могут ли выходные данные нескольких запросов клиентов отправляться в разные файлы журнала?

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

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

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

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

Редактировать:

Я использую log4net через средство записи Castle Windsor, и я 'Для решения этой проблемы я планирую переключиться на NLog.

NLog, кажется, поддерживает это поведение, используя средство визуализации макета {logger} в свойстве File цели *1026*.Я могу эффективно установить это свойство, создав дочерний регистратор с методом Виндзора ILogger.CreateChildLogger и установив {logger.shortName=True}.

См .:

http://nlog -project.org / forum# nabble-td1685989

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

1 Ответ

1 голос
/ 28 апреля 2011

Эта статья может быть вам интересна: Log4Net: программно указать несколько регистраторов (с несколькими файловыми апдендерами)

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

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

...