Как указать logging.config при развертывании нескольких приложений Spring Boot на tomcat - PullRequest
3 голосов
/ 06 марта 2019

У меня есть несколько весенних загрузочных приложений (X, Y, Z), упакованных как файлы war, развернутые на моем tomcat. Я хочу использовать log4j2 в качестве моей системы регистрации для моих приложений. Итак, чтобы изменить систему ведения журнала, скажем, X, в tomcat я устанавливаю значение 'logging.config' для Sping Boot Propery, чтобы указать на /tomcat/apps/X/WEB-INF/classes/log4j2-spring.properties. При этом ведение журнала отлично работает для X.

Flashback: Если мы укажем logging.config = classpath: log4j2.properties в application.properties, тогда ведение журнала будет работать, когда мы выполняем Запуск от имени Java-приложения в Eclipse. Но регистрация не работает, когда мы развертываем ее как файл WAR на tomcat. Чтобы заставить его работать, мне нужно было поместить logging.config = {Path-to-myapp} /log4j2.properties в tomcat / bin / setenv.bat.

У меня вопрос: если у меня несколько приложений, то как мне настроить logging.config для каждого приложения Spring Boot.

Поскольку ведение журнала инициализируется до создания ApplicationContext, Невозможно контролировать ведение журнала из @PropertySources в Spring @ Конфигурационные файлы. Единственный способ изменить систему регистрации или отключить его полностью можно через свойства системы.

Ответы [ 3 ]

4 голосов
/ 12 марта 2019

Я думаю, что есть ошибка. Поведение log4j2.properties / log4j2-spring.properties и log4j2-spring.xml не одинаково. Если мы используем log4j2.properties, то следует указать logging.config = classpath: log4j2.properties . С другой стороны, если мы используем log4j2-spring.xml , тогда нет необходимости указывать logging.config .

На мой взгляд, это важная ошибка, которую необходимо исправить, чтобы разрешить развертывание нескольких приложений Spring Boot на одном сервере.

Исправление должно быть сделано для поддержки log4j2.properties в org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.getCurrentlySupportedConfigLocations ()

1 голос
/ 12 марта 2019

Вы можете определить собственный путь регистрации для каждого приложения, примерно так:

logging:
  level:
    root: INFO
    org.apache.http: ERROR
  file: ${catalina.base:.}/logs/app-${app-number}.log
  pattern:
    file: ${logPattern}
    console: ${logPattern}
0 голосов
/ 17 марта 2019

У меня была похожая проблема, в этом случае я внес следующие изменения:

  • Выведите файл log4j2.properties из приложений, как вы делали, упомянули внешнее расположение файла в файле .env. (В вашем случае это файл .bat в tomcat). Каждая весенняя загрузка относится только к этому файлу.
  • В этом файле log4j2.properties мы создали отдельный appender и logger для каждой службы и настроили его.

Это не точное решение, но до определенных моментов оно работает.

Для каждой службы, если вы хотите сделать это, то это означает, что вы должны создать каждый файл и местоположение и все ... и это не поддается управлению после определенного момента.

Как уже упоминалось в предыдущем комментарии, нужен какой-то механизм, чтобы справиться с подобной ситуацией манерным и структурным способом.

...