Понимание конфигурации обратного входа Spring Boot 2 по умолчанию

#java #spring #spring-boot #logging #logback

#java #spring #spring-boot #ведение журнала #обратный вход

Вопрос:

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

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

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

${property.name:someDefaultValue}

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

<имя свойства=»LOG_FILE» значение=»${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}/>»

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

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

ведение журнала.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, предоставленную spring boot?

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

Единственной логикой добавления в XML-файлах обратного входа является:

<корневой уровень =»INFO»>

<appender-ref ref=»КОНСОЛЬ»/>

<appender-ref ссылка=»FILE»/>

</root>

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

Ответ №1:

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

Для обратного входа:https://logback.qos.ch/manual/configuration.html . В частности:

При определенных обстоятельствах может быть желательно, чтобы переменная имела значение по умолчанию, если оно не объявлено или его значение равно null. Как и в оболочке Bash, значения по умолчанию могут быть указаны с помощью оператора «:-«. Например, предполагая, что переменная с именем aName не определена, «${aName:-golden}» будет интерпретироваться как «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 и т.д.

Комментарии:

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