log4j - создайте несколько файлов на лету - PullRequest
2 голосов
/ 27 февраля 2012

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

Проще говоря, содержимое файла журнала для emplyee 5 должно быть эквивалентно выводу:

$ grep "EmployeeId=5" application.log

Какой самый простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

Вы можете настроить log4j на лету. Здесь вы связываете определенное имя регистратора с файлом, в который вы хотите его вывести. Вот статья на эту тему: http://robertmaldon.blogspot.com/2007/09/programmatically-configuring-log4j-and.html

Тогда вам также нужно создать регистратор для каждого из ваших сотрудников. Вы можете хранить эти регистраторы в хэш-карте, чтобы иметь к ним динамический доступ во время выполнения. Просто используйте Logger.getLogger («Сотрудник» + x), чтобы создать регистратор.

0 голосов
/ 27 февраля 2012

Log4J не позволяет вам динамически создавать «неопределенные» файлы журналов.Все файлы журналов должны быть предварительно определены (либо в файле log4j.xml, либо в файле свойств).

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

Log4j MDC

Если использования контекста MDC недостаточно, я могу только сказатьчто я думаю, что вам придется реализовать средство записи журнала самостоятельно.(Будьте осторожны с параллелизмом и производительностью.)

0 голосов
/ 27 февраля 2012

Я бы не использовал log4j или какую-либо инфраструктуру ведения журнала отладки для этого. Просто откройте файл и запишите желаемый результат. Файл f = новый файл ("outputdir /" + employee.id)

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