Коллеги, доброго дня.
Подскажите, пожалуйста, что может заставить приложение писать лог не только в app.log, но и в tomcat9-stdout.log?
Какая-то проблема в logback? Или в настройке tomcat?
Коллеги, доброго дня.
Подскажите, пожалуйста, что может заставить приложение писать лог не только в 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. Там тоже настраивается, какие сообщения распределяются по файлам или идут в консоль.
Александр, благодарю за ликбез!
@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-а по старту контейнера, запуску сервлетов, приложений и т.п.