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