Я создаю приложение 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 «выигрывает»?




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 и т. д.
Думаю, сейчас нет другого пути, кроме трудного пути.