下面的引用 SizeAndTimeBasedRollingPolicy 只能是1.2版本以上 ,如果是spring starter 中已经引用了,直接修改日志版本号即可
即在pom中加入:
<logback.version>1.2.1</logback.version>
注意1:TimeBasedRollingPolicy 和 SizeAndTimeBasedRollingPolicy 的区别。
使用TimeBasedRollingPolicy 则没有maxFileSize 这个标签,而且问题比较多,所以建议引用 SizeAndTimeBasedRollingPolicy 。
如果是使用 SizeAndTimeBasedRollingPolicy 则在文件日期后加“.%i”,却别生成当天的多个文件。
否则会报错误---》
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7c22f40b - Missing integer token, that is %i, in FileNamePattern [logs/appAllLog_%d{yyyy-MM-dd}.log]
ERROR in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@7c22f40b - See also http://logback.qos.ch/codes.html#sat_missing_integer_token
at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:161)
a
注意2:每天一个日志文件大小,当天的日志文件超过50MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。
logback.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> -->
<property name="LOG_HOME" value="logs" />
<springProfile name="debug">
<property name="ROOT_LEVEL" value="INFO" />
<property name="SPRING_LEVEL" value="INFO" />
</springProfile>
<springProfile name="dev,test">
<property name="ROOT_LEVEL" value="INFO" />
<property name="SPRING_LEVEL" value="INFO" />
</springProfile>
<springProfile name="pro,default">
<property name="ROOT_LEVEL" value="INFO" />
<property name="SPRING_LEVEL" value="INFO" />
</springProfile>
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<target>System.err</target>
<!-- 只输出level级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="appAllLog"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/appAllLog_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
<maxFileSize>50MB</maxFileSize>
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<!--日志文件最大的大小 -->
<!-- <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>50MB</MaxFileSize>
</triggeringPolicy> -->
</appender>
<appender name="apperror"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/apperror.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>apperror.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5p][%-25c] %.10000m%n</pattern>
</encoder>
<!--日志文件最大的大小 -->
<!-- <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>20MB</MaxFileSize>
</triggeringPolicy> -->
<!-- 只输出level级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<logger name="com.jst" level="debug" additivity="false" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="org.springframework" level="${SPRING_LEVEL}" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<!-- 下面是打印mybatis语句的配置-->
<logger name="com.ibatis" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="org.apache.ibatis" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="Java.sql.Connection" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="java.sql.Statement" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="java.sql.PreparedStatement" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="java.sql.ResultSet" additivity="false" level="debug" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<logger name="com.alibaba.dubbo" additivity="false" level="error" >
<appender-ref ref="apperror"/>
<appender-ref ref="appAllLog"/>
</logger>
<root level="${ROOT_LEVEL}">
<appender-ref ref="apperror" />
<!-- <appender-ref ref="Console" /> -->
<appender-ref ref="appAllLog" />
</root>
</configuration>