Logback - различный путь к файлу журнала в зависимости от профиля приложения - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь использовать logback.xml для своего проекта и для разработки. Я использую Windows Env и для развертывания я использую Unix ENV, поэтому я создал ниже XML-файл.

Однако, когда мое приложение запускается, оно пытается проверить указанный путь.и это в конечном итоге с ошибкой ниже.

как мне добиться этого с помощью logback?

java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[UNIX_FILE] - Failed to create parent directories for [C:\as\Users\satishkn\apps\workspaceslogs\carats-api-2019-02-18.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[UNIX_FILE] - openFile(null,true) call failed. java.io.FileNotFoundException: \as\Users\satishkn\apps\workspaceslogs\carats-api-2019-02-18.log (The system cannot find the path specified)
    at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169)

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="windows_log_dir" value="./logs/" />
    <property name="unix_log_dir" value="/as/Users/satishkn/apps/workspaceslogs/" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="WIN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${windows_log_dir}carats-api-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n
            </Pattern>
        </encoder>
    </appender>

    <appender name="UNIX_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${unix_log_dir}carats-api-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n
            </Pattern>
        </encoder>
    </appender>

    <springProfile name="default">
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="WIN_FILE" />
        </root>
    </springProfile>

    <!-- <springProfile name="dev">
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="UNIX_FILE" />
        </root>
    </springProfile>

    <springProfile name="prod">
        <root level="info">
            <appender-ref ref="UNIX_FILE" />
        </root>
    </springProfile> -->

</configuration>

1 Ответ

0 голосов
/ 18 февраля 2019

Используя вашу конфигурацию, оба приложения будут созданы как в среде Unix, так и в среде Windows.Вы должны использовать условную конфигурацию для выполнения ваших требований.

Я предлагаю вам определить параметр log_dir следующим образом:

<if condition='property("os.name").contains("win")'>
        <then>
            <property name="log_dir" value="./logs/" />
        </then>
        <else>
            <property name="log_dir" value="/as/Users/satishkn/apps/workspaceslogs/" />
        </else>
 </if>

Затем создайте единственного аппендера, который использует свойство log_dir.

...