Вопрос по логированию

Коллеги, доброго дня.

Подскажите, пожалуйста, что может заставить приложение писать лог не только в app.log, но и в tomcat9-stdout.log?
Какая-то проблема в logback? Или в настройке tomcat?

Добрый день,

У каждого процесса во всех ОС есть такая вещь как стандартный поток ввода-вывода (stdout). Даже у оконного приложения в Windows.
Tomcat 9 перенаправляет свой stdout в файл tomcat9-stdout.log.

Каждая библиотека логгирования настраивает разные назначения для журналов. При этом важно: одно и то же сообщение может быть записано несколько раз в разные места.

Если у вас в проекте в logback.xml есть:

<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">

то сообщения, которые попали под фильтр этого appender, уйдут в stdout. Но это не значит, что они не попадут в другой файловый журнал.

В самом Tomcat есть отдельный файл для настроек логгирования его встроенных сообщений - это logging.properties. Там тоже настраивается, какие сообщения распределяются по файлам или идут в консоль.

1 симпатия

Александр, благодарю за ликбез!

@albudarov , доброго дня!
Я извиняюсь, но “непонятка” осталась.
В logback.xml действительно есть соответствующий appender.
А в logging.properties есть соответствующий хендлер:
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

Как я понял, если я удалю из logging.properties этот хендлер (java.util.logging.ConsoleHandler), то томкат должен перестать писать tomcat9-stdout.log. Но на практике этого не происходит.

Двойной вывод сообщений остановил только убрав appender из logback.xml

Так и должно работать? Или я что-то упустил?

logback и logging.properties это два независимых механизма, они обрабатывают разные виды сообщений.
logging.properties пишет системные сообщения Tomcat-а по старту контейнера, запуску сервлетов, приложений и т.п.

1 симпатия