Spring как и любой другой сложный фреймворк умеет сам себя логировать. Иногда нужно уметь смотреть что там внутри происходит. Поэтому давайте попробуем разобраться, как можно заставить его говорить больше, чем он умеет по умолчанию.
Поставляется Spring со встроенным логгером JCL. По сути, это ранний аналог sf4j. Не сам логгер, а обёртка над различными имплементациями. Отсюда наша задача сводится к настройке JCL и стандартного Java логгера. Вполне, думаю, возможно подключить и другие реализации, но это всё зависит от конкретной задачи. Наша же заключается в том, чтобы Spring куда нибудь вывел дебажную информацию о себе. Поэтому Java логгера будет достаточно.
Итак. Задача сводится к следующим трём пунктам:
1) Нам нужно сказать JCL о том, чтобы он подключил Java логгер
2) Настроить Java логгер
3) Получить логи
Давайте теперь постараемся всё это реализовать:
1) Реализуется очень просто. Нужно всего лишь положить файл commons-logging.properties в корень нашего класспаса. Содержимое его должно быть:
|
1 |
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger |
Но, если копнуть глубже, и посмотреть внутрь JCL, то мы увидим, что это лишне, поскольку он сам по умолчанию использует Java логгер.
2) Создадим теперь файл для настроек Java логгера. Положите его в любое место и добавьте следующее содержимое:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# The following creates two handlers handlers=java.util.logging.ConsoleHandler, java.util.logging.FileHandler # Set the default logging level for the root logger .level=SEVERE # log level for the "com.rst.example" package org.springframework.level=FINEST # Set the default logging level java.util.logging.ConsoleHandler.level=ALL java.util.logging.FileHandler.level=FINE # Set the default formatter java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter # Specify the location and name of the log file java.util.logging.FileHandler.pattern=log-test.log |
Обратите внимание на строку 7. С её помощью можно получать логи из того пакета, который именно мы захотим.
3) Теперь чтобы это всё заработало нужно Java логгеру сказать, чтобы он настроился из того файла, который мы только что создали. Это можно сделать через системную переменную:
|
1 |
System.setProperty("java.util.logging.config.file","<path-to>java-logging.properties"); |
Обратите внимание, что здесь используется абсолютный путь к файлу.
Вот вроде и всё. С таким подходом можно получить логи любого фреймворка, который юзает JCL по умолчанию.