2009-05-08 1 views
3

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

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

ответ

5

SiftingAppender, который поставляется с logback (преемник log4j), предназначен для обработки этой ситуации.

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

documentation for SiftingAppender содержит пример для разделения журналов на основе идентификатора пользователя.

+0

Когда-то я был так на Java, что не было похоже на то, что Logback мог ускользнуть от моего радара. Спасибо, что указали это.Переход на новое программное обеспечение, если он набирает нам много функциональности, не может быть и речи. –

+0

Вы должны использовать MDC для информации пользователя. NDC не поддерживается SLF4J/Logback. – Huxi

+0

Действительно, NDC не является частью API SLF4J. Однако обратите внимание, что можно эмулировать NDC с использованием MDC. См. Например, http://svn.slf4j.org/viewvc?view=rev&revision=1268 – Ceki

1

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

1

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

Если вы катитесь самостоятельно, вы, вероятно, захотите создать Appender, который внутренне использует MapRollingFileAppender s, который создается динамически. Однако я не знаю, имеет ли Аппендер доступ к НДЦ. Это, вероятно, было бы нетривиальным делом.

1

Я так и не встретил такого приятеля, но я не думаю, что это очень важно написать свое собственное. Если вы хотите сделать это самостоятельно - посмотрите на AppenderSkeleton, вам нужно будет всего лишь переопределить метод append (..). Когда ваш appender будет вызван, вы получите полностью сформированное событие, которое будет содержать все необходимое, включая NDC. Делайте с ним то, что вам нравится. Я думаю, что MDC (сопоставленный диагностический контекст) в вашем случае является жизнеспособной альтернативой, он более гибкий IMHO.

Если вы ищете коммерческое решение - посмотрите на logFaces, он был разработан для работы с подобными ситуациями. Раскрытие информации: Я являюсь автором этого продукта.

+0

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

Смежные вопросы