среда, 29 октября 2008 г.

Включаем логирование в веб-приложении, основанном на Spring, через Log4j


Развивая тему использования 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>

 


После этого можно корректно использовать 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 комментариев:

TheMalkolm комментирует...

Ухты, там надо как то явно указывать? А у меня Spring после добавления log4j сам его автоматически использует (ну properties конечно нужно сделать, без всяких веб.хмл)

Samolisov Pavel комментирует...

Фишка в том, что в данном случае log4j.properties не расположена в class-path приложения, поэтому ее расположение нужно указать явно.

TheMalkolm комментирует...

Понятно. Слона то я и не заметил :)

Samolisov Pavel комментирует...

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

Александр комментирует...

Spring seems so good in many developments aspects, so and in logging too)

Unknown комментирует...

Log4j2 ни в какую не хочет выводить логи на консоль или файл в Spring MVC

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!