5.6.1. Настройка логгирования в Tomcat

При выполнении задачи Gradle setupTomcat в каталог проекта устанавливается сервер Tomcat, и производится его дополнительная конфигурация. В частности, в подкаталоге tomcat/bin создаются файлы setenv.bat и setenv.sh, а в подкаталоге tomcat/conf файл log4j.xml.

Файлы setenv.* в переменной CATALINA_OPTS в числе прочего устанавливают параметры загрузки конфигурационного файла log4j.xml.

Файл log4j.xml определяет конфигурацию логгирования. Рассмотрим структуру этого файла.

  • Элементы appender задают "устройства вывода" логов. Основными аппендерами являются FILE и CONSOLE. В параметре Threshold аппендера можно задать порог уровня сообщения. По умолчанию порог для файла - DEBUG, для консоли - INFO. Это означает, что в файл выводятся сообщения с уровнями ERROR, WARN, INFO, DEBUG, а в консоль - с уровнями ERROR, WARN и INFO.

    Для файлового аппендера в параметре File задается путь к файлу лога, а в параметре Append - признак, стирать ли содержимое файла при перезапуске сервера, или добавлять в конец. Настройки по умолчанию задают файл tomcat/logs/app.log и режим стирания при перезапуске. На этапе эксплуатации приложения рекомендуется установить для параметра Append значение true.

    Файловый аппендер по умолчанию реализуется классом org.apache.log4j.DailyRollingFileAppender, который ежедневно в 00:00:00 переименовывает накопившийся за день файл лога в имя с прошедшей датой, и начинает новый лог. Это позволяет избежать создания слишком больших файлов логов.

  • Элементы category задают параметры логгеров, через которые производится посылка сообщений из кода программы. Имена категорий иерархические, то есть например настройки для категории com.company.sample влияют на логгеры com.company.sample.core.CustomerServiceBean, com.company.sample.web.CustomerBrowse, если для них явно не заданы собственные настройки.

    Минимальный уровень указывается в элементе priority. Например, если для категории задан приоритет INFO, то сообщения с уровнями DEBUG и TRACE выводиться не будут. Следует иметь в виду, что на вывод сообщения также влияет порог уровня, заданный в аппендере.

Оперативно изменять уровни для категорий и пороги аппендеров для работающего сервера можно с помощью экрана Администрирование -> Журнал сервера, доступного в веб клиенте. Сделанные настройки логгирования действуют только в текущем сеансе работы сервера и в файл не сохраняются. Этот экран позволяет также просматривать и загружать файлы логов из каталога журналов сервера tomcat/logs.

Платформа автоматически добавляет к сообщениям, выводимым в лог, следующую информацию:

  • [приложение] - имя веб приложения, развернутого в Tomcat, код которого выводит данное сообщение. Эта информация помогает различить сообщения от разных блоков приложения (Middleware, Web Client), так как они выводятся в один файл.

  • [пользователь] - логин пользователя приложения, от имени которого в данный момент работает код, выводящий сообщение. Это позволяет в общем логе отслеживать активность конкретных пользователей. Если код, выводящий сообщение, не связан в момент вывода с пользовательской сессией, информация о пользователе не выводится.

Например, следующее сообщение в логе выведено кодом блока Middleware (app-core), работающим от имени пользователя admin:

2013-12-19 18:48:17,282 DEBUG [com.haulmont.cuba.core.app.DataManagerBean] [app-core] [admin] loadList: metaClass=sec$User, view=com.haulmont.cuba.security.entity.User/user.browse, query=select u from sec$User u, max=100