У меня возникают странные проблемы при запуске приложения Spring Boot. Он был настроен на использование Log4J2 в качестве своего регистратора (регистратор обратного вызова отключен).
log4j2.xml:
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="serviceName">$${sys:service.name}</Property>
<Property name="serviceId">$${sys:service.id}</Property>
<Property name="LOG_PATTERN">
[%d{yyyy-MM-dd HH:mm:ss.SSS}] %t %-5p: %c{2}:%L - %m%n
</Property>
<Property name="STATS_PATTERN">
%m%n
</Property>
<Property name="logFile">logs/$${sys:service.name}-$${sys:service.id}</Property>
<Property name="statsFile">metrics/$${sys:service.name}-$${sys:service.id}_stats.json</Property>
<!--
<Property name="logFile">logs/${serviceName}-${serviceId}</Property>
<Property name="statsFile">metrics/${serviceName}-${serviceId}_stats.json</Property>
-->
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}" />
</Console>
<RollingFile name="RollingFile" fileName="${logFile}.current-session.log"
filePattern="${logFile}.%i.log.gz" ignoreExceptions="false">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="10" />
</RollingFile>
<File name="StatsFile" fileName="${statsFile}" append="false">
<PatternLayout>
<Pattern>${STATS_PATTERN}</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="<package>.StatsWriter" level="info" additivity="false">
<AppenderRef ref="StatsFile" />
</Logger>
<Root level="info">
<AppenderRef ref="ConsoleAppender" />
</Root>
</Loggers>
</Configuration>
Main Issue
У меня есть некоторая подстановка переменных в файле log4j2.xml, чтобы обеспечить возможность изменения, особенно для имен файлов журнала. Когда я запускаю приложение, файлы журнала создаются в правильном каталоге и, по-видимому, имеют фактическое содержимое журнала. Проблема в том, что они названы неправильно. Например, вместо Client-1.current-session.log
файл называется ${sys:service.name}-${sys:service.id}.current-session.log
. Очевидно, что подстановка переменных произошла не так, как планировалось.
Свойства service.name
и service.id
являются параметрами конфигурации Spring Boot, которые в настоящее время определены в соответствующем файле application.yml. Я думал, что свойства в файле будут доступны, но это явно не так.
Есть ли способ сделать свойства application.yml доступными здесь? Если это не выполнимо, каковы другие способы достижения этой цели?
Дополнительный вопрос
Когда я выполняю приложение в своей тестовой среде, яустановить регистратор для вывода на консоль:
<Root level="info">
<AppenderRef ref="ConsoleAppender" />
</Root>
Когда он выполняется, вывод отображается на консоли, но, как ни странно, файл журнала также создается. Почему это так?
ПРИМЕЧАНИЕ :
Существует элемент SO ( Использовать свойства загрузочного приложения Spring в log4j2.xml ) (этоэто второй ответ), что-то вроде этого, но кажется (как признает автор) своего рода хакером. Я еще не пробовал (пока).
Меня немного смущают ссылки на application- "profile" .yml и log4j2-spring.xml. Я не знаком с этими вариациями этих имен файлов. Каково значение этих вариаций (обоих типов файлов)?