@BRONNER

Как в Logback.xml сделать переопределение переменных?

Пролистал документацию по Logback, узнал, что можно использовать условия и переменные, но не знаю почему они не работают. Мне нужно, чтобы в зависимости от ОС выбиралась правильная папка для логов

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <if condition='property("os.name").contains("windows")'>
        <then>
            <property name="app.dir" value="${env.APPDATA}" />
        </then>
    </if>
    <if condition='${os.name}.contains("mac")'>
        <then>
            <property name="app.dir" value="${user.home}/Library/Application Support" />
        </then>
    </if>
    <if condition='${os.name}.contains("linux")'>
        <then>
            <property name="app.dir" value="${user.home}" />
        </then>
    </if>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${app.dir}/MyApp/logs/app.log</file>
        <encoder>
            <Pattern>[%d{Y-MM-dd HH:mm:ss}] [%level] %msg%n</Pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>
  • Вопрос задан
  • 3011 просмотров
Решения вопроса 1
@BRONNER Автор вопроса
Надо было еще либу добавить
<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>2.6.1</version>
</dependency>


А так же немного упростил код
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <if condition='property("os.name").toLowerCase().startsWith("windows")'>
            <then>
                <file>${APPDATA}/MyApp/logs/MyApp.log</file>
            </then>
            <else>
                <if condition='property("os.name").toLowerCase().startsWith("mac")'>
                    <then>
                        <file>${user.home}/Library/Application Support/MyApp/logs/MyApp.log</file>
                    </then>
                    <else>
                        <file>${user.home}/.myapp/logs/myapp.log</file>
                    </else>
                </if>
            </else>
        </if>
        <encoder>
            <Pattern>[%d{Y-MM-dd HH:mm:ss}] [%level] %msg%n</Pattern>
        </encoder>
        <prudent>true</prudent>
    </appender>
    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы