<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- https://github.com/spring-projects/spring-boot/blob/v1.5.13.RELEASE/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml -->
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!-- 日志文件路径的配置 -->
<property name="APP_NAME" value="myApp" />
<property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs" />
<!-- 这个是默认的日志类型的名称 -->
<property name="LOG_FILE" value="${LOG_PATH}/application.log" />
<!--CONSOLE_LOG_PATTERN的自定义配置,可以设置颜色和一些格式。如果不配置,默认黑白日志 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 每一个appender中配置一种日志格式 -->
<appender name="APPLICATION"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<!-- 编码用的格式 -->
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<!-- 日志的滚动策略, 一种是按照时间的TimeBaseRollingPolicy,一种是按照索引的SizeBasedTriggeringPolicy,这里选用的是第二种方式 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--后台相关日志-->
<appender name="BackStageAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/backstage/backstage.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %class{0}.%method %line - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/backstage/backstage-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<maxHistory>10</maxHistory>
<maxFileSize>200MB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<!--执行相关日志-->
<appender name="ExecuteAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/execute/execute.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %class{0}.%method %line - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/execute/execute-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<maxHistory>10</maxHistory>
<maxFileSize>200MB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
</appender>
<logger name="backStageLogger" additivity="true">
<level value="${log.level}"/>
<appender-ref ref="BackStageAppender"/>
</logger>
<logger name="executeLogger" additivity="false">
<level value="${log.level}"/>
<appender-ref ref="ExecuteAppender"/>
</logger>
<!--root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
不能设置为INHERITED或者同义词NULL。默认是DEBUG
可以包含零个或多个元素,标识这个appender将会添加到这个logger-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="APPLICATION" />
</root>
</configuration>
rollingPolicy:
(1)TimeBaseRollingPolicy
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/back.%d{yyyy-MM-dd_HH}.log</FileNamePattern>
<!-- 日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
设置日志文件保留天数为30天,当第31天生成日志的时候,会把第一天的自动删掉。
(2)SizeBasedTriggeringPolicy
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>50MB</maxFileSize>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
maxHistory设置最大的保存天数。maxFileSize设置了每个文件的最大容量。totalSizeCap限制总的日志文件大小。所以当我们想按照日期和大小来管理日志时,可以用此方式,每天按照大小输出n个日志文件。