Где объявить log4j в сервлетах и ​​фильтрах? - PullRequest
1 голос
/ 07 апреля 2011

Я сбиваю с толку, когда я пытаюсь войти в процесс, используя log4j, я не знаю, куда поместить регистратор. Теперь я поместил регистратор в сервлет и объявил его общедоступным, чтобы каждый мог его использовать. Мой фильтр тоже использует регистратор. Но я не уверен, уничтожен ли сервлет, уничтожит ли регистратор тоже?

Другой вопрос, в моем понимании, что это фильтр перед сервлетом, и когда я создаю регистратор в сервлете, в самом начале фильтр не должен использовать регистратор, так как я позволяю фильтру регистрировать журнал. процесс, не существует каких-то исключений типа "регистратор не существует", почему?

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

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Создайте private static final Logger для каждого класса. Например, напишите следующую строку в вашем классе сервлетов:

private static final Logger logger = Logger.getLogger(YourServletClassName.class);

и следующая строка в вашем классе фильтров:

private static final Logger logger = Logger.getLogger(YourFilterClassName.class);

Обратите внимание на различные значения, передаваемые в качестве параметров в методе getLogger(). Регистратор должен быть private static, чтобы его могли использовать несколько экземпляров одного класса. Таким образом, вы можете контролировать вывод из вашего приложения по классам. Например, если вы хотите видеть выходные данные из всех экземпляров только YourServletClassName (хотя обычно создается только один экземпляр класса Servlet, который повторно используется для обработки каждого запроса), вы можете написать следующие строки в вашем log4j.properties:

log4j.logger.your.package.YourServletClassName=TRACE
log4j.logger.your.package.YourFilterClassName=OFF

Таким образом, журналы с YourServletClassName будут показаны только и ничего не будет показано с YourFilterClassName. Надеюсь, это поможет.

0 голосов
/ 07 апреля 2011

Вы должны определить отдельный регистратор в каждом из ваших классов

static org.apache.log4j.Logger logger = Logger.getLogger(MyClass.class);

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

...