Получение домашнего пути пользователя в application.properties в Spring Boot
Это должно быть довольно простой задачей, но после долгих исследований мне трудно найти какой-либо способ сделать это.
Я просто хочу создать файл журнала в домашнем каталоге текущего пользователя. Согласно официальной документации, переменные, которые я должен изменить, logging.file
а также logging.path
, Но как я могу получить значение пользовательского дома в logging.path
?
Я попытался настроить его как:
logging.path=#{systemProperties['user.home']}
но безуспешно
3 ответа
Я считаю, что я решил проблему. Рассматриваемый файл журнала фактически генерировался в пути к классу только при запуске из IDE (Eclipse Luna FYI). Позже, когда я сделал jar-файл и запустил его, файл журнала генерировался в правильном месте, как указано в application.properties
файл. Я до сих пор не понимаю, почему он был сгенерирован в пути к классам, когда я запускал его из Eclipse.
${user.home}
это ваш ответ.
Например: ${user.home}/logs/app/app.log
Пружинный пыльник 2.2.6
Если вы используете Linux или Mac, вы можете использовать logging.path=${HOME}/logs
Я столкнулся с той же проблемой в среде разработки, поэтому попробовал другой подход. Если вы прочитали официальный документ, в нем также говорится, что вы можете предоставить пользовательские конфигурации. И logging.path будет использоваться по умолчанию, если пользовательская конфигурация не предоставила IMO.
Я хочу использовать log4j2, поэтому мне нужен собственный шаблон и другие вещи. Для этого я фактически поместил файл конфигурации log4j2.xml в путь к классам. Посмотрите на мой файл xml conf для получения более подробной информации, которая на самом деле работала как в dev, так и в production.
<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="30">
<properties>
<property name="app.name">my-app</property>
<property name="pattern">%d{ISO8601} %-5p %c - %m%n</property>
</properties>
<appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${pattern}"/>
</Console>
<RollingRandomAccessFile name="my_app" append="false" fileName="${sys:user.home}\.${app.name}\logs\${app.name}.log"
filePattern="${sys:user.home}\.${app.name}\logs\$${date:yyyy-MM}/${app.name}-%d{yyyy-MM-dd}-%i.log.zip">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="5 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>
</appenders>
<loggers>
<root level="INFO">
<AppenderRef ref="console"/> <!-- To console -->
<AppenderRef ref="my_app"/>
</root>
<AsyncLogger name="com.rameysoft.streamline.main" additivity="FALSE" level="DEBUG">
<AppenderRef ref="console"/>
<AppenderRef ref="my_app"/>
</AsyncLogger>
</loggers>
</configuration>
logging.path=~/logs.
Простое решение - использовать ~
символ для домашнего каталога, хорошо работает в linux / mac / windows.
SpringBoot 2.2.6