Развивая тему использования Spring-фреймворка поговорим сегодня об одной из самых важных для разработчика вещей - о логгировании. Для ведения логов многие Java-программисты используют замечательную и очень мощную библиотеку Log4J.
Поэтому сегодня мы поговорим о двух вещах - о том, как подключить log4j к веб-приложению, основаному на Spring и как использовать эту библиотеку для того, чтобы посмотреть, что происходит внутри фреймворка.
Для того, чтобы подключить log4j к веб-приложению необходимо указать спрингу где лежит файл с настройками библиотеки. Для этого в дескриптор развертывания (web.xml) необходимо добавить строки, устанавливающие параметр сервлет-контекста log4jConfigLocation и подключить Log4jConfigListener. Выглядит все это примерно так:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
После этого можно корректно использовать log4j в своих классах.
Если хочется посмотреть, что происходит в самом Spring фреймворке возникают сложности. Дело в том, что spring использует не log4j, а commons-logging. Но commons-logging обладает приятной особенностью - она позволяет делегировать логгирование log4j. Для такого делегирования необходимо в classpath приложения (в случае веб-приложения - в /WEB-INF/classes/) создать файл commons-logging.properties, содержащий следующую строку:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
Ну и конечно же, нужно не забыть в log4j.properties указать нужный уровень логгирования для Spring, например такой:
log4j.logger.org.springframework=debug
Все, после этого можно увидеть много нового и интересного о том, как работает Spring-фреймворк.
Если есть вопросы или пожелания - прошу оставлять их в комментариях.
Понравилось сообщение - подпишись на блог
6 комментариев:
Ухты, там надо как то явно указывать? А у меня Spring после добавления log4j сам его автоматически использует (ну properties конечно нужно сделать, без всяких веб.хмл)
Фишка в том, что в данном случае log4j.properties не расположена в class-path приложения, поэтому ее расположение нужно указать явно.
Понятно. Слона то я и не заметил :)
В этом нет ничего страшного. Многие разработчики размещают properties-файлы в classpath приложения. У нас же в проекте принята другая структура каталогов, к счастью можно заставить Spring ее поддерживать.
Spring seems so good in many developments aspects, so and in logging too)
Log4j2 ни в какую не хочет выводить логи на консоль или файл в Spring MVC
Отправить комментарий
Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!