Понимание конфигурации журнала Spring Boot 2 по умолчанию

Я создаю приложение Java Spring Boot 2.1, которое использует Maven для добавления зависимости spring-boot-starter. Как написано в документация, это включает конфигурацию журнала по умолчанию. Эту конфигурацию можно найти в свободном доступе в этом репозитории, и она содержит синтаксис, который мне немного сложно понять.

1. Таинственный рывок

Я знаю, что свойства Spring задаются с использованием следующего синтаксиса

${property.name:someDefaultValue}

Однако в XML-файлах для конфигурации журнала всегда после двоеточия стоит тире. Почему это? Например:

<property name = "LOG_FILE" value = "${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}/>"

2. Изменение имен свойств

Мне также непонятно, откуда берутся все эти названия свойств. В документации упоминается заполнение нашего application.properties или application.yml такими свойствами, как:

logging.file = /app/logs/mylog.log

Как и где свойство с именем logging.file преобразуется в свойство с именем LOG_FILE, используемое в xml-файле журнала?

3. Пропавшее имущество

В частности, это свойство не имеет эквивалентного свойства в application.properties (или .yml) для его настройки.

<totalSizeCap>${LOG_FILE_TOTAL_SIZE_CAP:-0} </totalSizeCap>

Если я хочу изменить это свойство на другое значение, мне нужно каким-то образом установить свойство LOG_FILE_TOTAL_SIZE_CAP. Как я могу сделать это, все еще используя исходную конфигурацию журнала по умолчанию xml, предоставленную весенней загрузкой?

4. Мы застряли с приложениями по умолчанию

Единственная логика приложения в файлах logback xml:

<root level = "INFO">

<appender-ref ref = "CONSOLE"/>

<appender-ref ref = "FILE"/>

</root>

И application.properties не позволяют это изменить. Хотя я должен признать, что это очень полезное значение по умолчанию, иногда оно не работает. Кажется излишним полностью перезаписывать всю конфигурацию logback xml для одной небольшой настройки приложения или политики. Если бы я предоставил несколько настраиваемых файлов конфигурации logback/xml в своем пути к классам, будет ли logback «объединять» их или просто выбирать один и игнорировать другие? Как работает перезапись/слияние, какой xml «выигрывает»?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 275
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1. Таинственный рывок

Для журнала: https://logback.qos.ch/manual/configuration.html. Конкретно:

Under certain circumstances, it may be desirable for a variable to have a default value if it is not declared or its value is null. As in the Bash shell, default values can be specified using the ":-" operator. For example, assuming the variable named aName is not defined, "${aName:-golden}" will be interpreted as "golden".

2. Изменение имен свойств

Это должно помочь с сопоставлениями: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html. Также поковыряйтесь org.springframework.boot.logging.LoggingSystemProperties.

3. Пропавшее имущество

Я согласен с вашей оценкой! Может быть, немного покопаться в LoggingSystemProperties может помочь здесь (в методе apply()?). Но, скорее всего, это будет решено путем предоставления собственного файла logback.xml.

4. Мы застряли с приложениями по умолчанию

Это также верно. См. 83.1 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html. Практически каждый проект, с которым я когда-либо работал, предоставлял свои собственные файлы log4j.xml, logback.xml и т. д.

Думаю, сейчас нет другого пути, кроме трудного пути.

user1884155 26.03.2019 03:38

Другие вопросы по теме