文件放在resources文件夹下,文件名可以使是:logback-spring.xml或者logback.xml
文章是根据1.2.12版本的logback写的,SizeAndTimeBasedRollingPolicy滚动策略的参数和网上大部分说的不一样,比如MaxHistory和totalSizeCap无法单独使用必须同时配置才生效
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan(配置文件热加载,默认是true)
scanPeriod(检测配置文件热加载间隔,默认1分钟)
debug(打印出logback内部日志信息,默认是false)
-->
<configuration scan="true" scanPeriod="600 seconds" debug="false">
<!-- property 用来定义变量,定义的变量可以通过${变量name}来获取 -->
<!-- 定义日志文件的存储地址 -->
<property name="LOG_HOME" value="./log" />
<!-- 文件名称 -->
<property name="LOG_FILE_NAME" value="log" />
<!-- 控制台输出格式 -->
<property name="STDOUT_PATTERN_VALUE" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n" />
<!-- 文件输出格式 -->
<property name="FILE_PATTERN_VALUE" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n" />
<!--
appender 日志的渲染器(格式化日志输出)
name 渲染器名称
class 渲染器策略常用的有:控制台输出(ConsoleAppender)和文件输出(RollingFileAppender)
-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder表示输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--
%d{yyyy-MM-dd HH:mm:ss.SSS} 表示日期
%thread表示线程名
%-5level:级别从左显示5个字符宽度
%logger{50}表示具体的日志输出者,比如类名,括号内表示长度
%msg:日志消息
%red: 可以设置颜色
%highlight: 高亮显示
%n是换行符
-->
<pattern>${STDOUT_PATTERN_VALUE}</pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出日志 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- 单个日志文件最大限制 -->
<maxFileSize>10MB</maxFileSize>
<!-- 从当前时间往前翻指定天数的日志,MaxHistory和totalSizeCap结合使用才生效 -->
<MaxHistory>30</MaxHistory>
<!-- 是否在项目启动时执行删除日志操作 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<!-- 结合MaxHistory一起使用,指定天数的日志总和大于totalSizeCap值,就会删除旧的日志 -->
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN_VALUE}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出日志(此日志文件只记录ERROR级别的) -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/error_${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_PATTERN_VALUE}</pattern>
<charset>UTF-8</charset>
</encoder>
<!--
此日志文件只记录ERROR级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
对单个包或者类进行打印配置,也可以配置项目引入的其他jar包的日志也打印
name:需要打印日志的(类/包)的地址
addtivity:是否向上级loger传递打印信息。默认是true。向上传递日志会导致日志打印两遍
-->
<!-- myibatis log configure -->
<logger name="com.apache.ibatis" level="TRACE" additivity="false"/>
<logger name="java.sql.Connection" level="DEBUG" additivity="false"/>
<logger name="java.sql.Statement" level="DEBUG" additivity="false"/>
<logger name="java.sql.PreparedStatement" level="DEBUG" additivity="false"/>
<!--
如果想要为指定的类/包,输出指定的日志文件
定义一个appender标签,这个appender标签就不要放在root标签里了
<logger name="指定的类/包地址" level="DEBUG" additivity="false">
<appender-ref ref="appender的名字" />
</logger>
-->
<!--
root配置必须在appender下边,添加哪个appender就会打印哪个appender的日志
level:最低日志级别限制
-->
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="FILE_ERROR" />
</root>
</configuration>