Получение домашнего пути пользователя в 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

Другие вопросы по тегам