在logback spring boot logging中对totalSizeCap没有适用的操作

时间:2016-10-17 11:48:00

标签: logging spring-boot logback

我试图使用logback中的“totalSizeCap”元素限制最大日志文件数。我正在使用spring boot应用程序,所以包括如下的logback:

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <include resource="log4j/logback-${spring.profiles.active}.xml"/>
</configuration>

的log4j /的logback-DEV.xml

included>

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

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/tmp//log/log.out</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>/tmp/log/log_%d{yyyy-MM-dd}.%i.out</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>1</maxHistory>
            <totalSizeCap>2MB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger name="com.company" level="INFO" />
    <logger name="org.springframework" level="ERROR" />

</included>

ERROR

ERROR in ch.qos.logback.core.joran.spi.Interpreter@17:27 - no applicable action for [totalSizeCap], current ElementPath  is [[configuration][appender][rollingPolicy][totalSizeCap]]

我如何限制日志文件?

1 个答案:

答案 0 :(得分:0)

我的猜测是,logback.xml不适合指定您想要的内容。相反,您应该使用logback-spring.xml文件。这是因为在ApplicationContext之前加载了Logback框架(以便上下文可以记录一些初始内容),然后上下文加载logback-spring.xml以在应用程序剩余的时间内更改logback设置运行。因此我的猜测是${spring.profiles.active}不会被活动配置文件替换。

来自reference

  

如果可能,我们建议您使用-spring变体   记录配置(例如logback-spring.xml而不是   logback.xml)。如果您使用标准配置位置,Spring   无法完全控制日志初始化。

在回答这个问题时进一步阅读,有一节特别围绕Logback extensions。看起来您需要在配置中使用<springProperty>元素来公开属性。

<springProperty scope="context" name="activeProfile" source="spring.profiles.active" defaultValue="DEV"/>
<include resource="log4j/logback-${activeProfile}.xml"/>