如果不存在/删除,则SLF4J + Logback创建文件

时间:2017-04-01 03:08:36

标签: spring-boot logback slf4j

我一直在研究这个问题并且根本没有得到解决方案。我的要求是创建一个日志文件,如果它不在那里。 以下是我的 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<property name="LOG_PATH" value="/home/logs" />

<appender name="FILE-AUDIT"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/debug.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>
            %p\t%d{dd MMM yyyy HH:mm:ss,SSS}\t%r\t%c\t[--%t--]\t%m%n
        </Pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- rollover daily -->
        <fileNamePattern>${LOG_PATH}/debug.%d{yyyy-MM-dd}.%i.log
                    </fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

</appender>

<logger name="com.example" level="debug"
    additivity="false">
    <appender-ref ref="FILE-AUDIT" />
</logger>

<root level="debug">
    <appender-ref ref="FILE-AUDIT" />
</root>

</configuration>

我尝试将配置更改为配置debug =&#34; true&#34;,但没有运气。 实现这个的正确方法是什么?

请不要写入检查文件权限或要求我使用Log4j,我更改了我的应用程序以使用slf4j而不是log4j。如果我也删除了该文件,则应该创建

2 个答案:

答案 0 :(得分:0)

您应该使用ch.qos.logback.core.FileAppender进行文件追加。

<appender name="File-Appender" class="ch.qos.logback.core.FileAppender">
        <file>${LOG_PATH}/logfile-${timestamp-by-second}.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
</appender>

答案 1 :(得分:0)

由于您之前曾说过您使用过Log4j,因此请确保您未尝试从 .pom 中排除“spring-boot-starter-logging”避免Log4j和slf4j之间发生冲突。

我在 logback.xml 中使用相同的设置,一切正常

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg %n</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>

    <appender name="testServiceFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/test_service_%d{yyyy-MM-dd}.log</FileNamePattern>
        </rollingPolicy>
        <encoder>
            <Pattern>%-5level %logger{35} - %msg %n</Pattern>
        </encoder>
    </appender>

    <logger name="com.mycompany.test" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="testServiceFileAppender"/>
    </logger>

    <root>
        <level value="INFO"/>
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>
pom中的

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>