<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--日志输出格式:
%-5level 日志级别(5个字符)
%d{yyyy-MM-dd HH:mm:ss.SSS} 日期
%c 类的完整名称
%M 方法名
%L 行号(尽量别打印,影响性能)
%thread 线程名称
%m 或者 %msg 为信息
%n 换行
-->
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M [%thread] %msg %n"/>
<property name="log_dir" value="D:/logs/logback"/>
<!--Appender:
设置日志信息的去向,常用的有以下几个
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.FileAppender (文件)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺 寸的时候产生一个新文件)
-->
<!--控制台打印-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--输出流对象 默认 System.out 改为 System.err 日志文字颜色会变-->
<target>System.out</target>
<!--日志格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--文件输出-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${log_dir}/logback.log</file>
<!--日志格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--日志拆分 和 文档压缩-->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_dir}/roll_logback.log</file>
<!--日志格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!--拆分规则。当日志文件过大时,拆分打包成如下文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--按照时间和压缩格式声明拆分的文件名-->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<!--按照文件大小拆分-->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
<!--日志过滤规则。只接收 level 等级的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--异步日志-->
<appender name="asyncRollFile" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollFile"/>
</appender>
<!--
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
<logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 如果未设置此属性,那么当前logger将会继承上级的级别。
additivity: 是否向上级loger传递打印信息。默认是true。
<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个 logger
-->
<!--
<root>也是<logger>元素,但是它是根logger。
默认debug level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个 logger。
-->
<root level="info">
<appender-ref ref="console"/>
<!-- <appender-ref ref="file"/>-->
<appender-ref ref="rollFile"/>
<!-- <appender-ref ref="asyncRollFile"/>-->
</root>
</configuration>
测试
package com.yyj.controller;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author asus
* @version Copyright by
* @date 2022/6/18
* @describe:
*/
public class Slf4jTest {
//定义日志对象
public final static Logger LOGGER = LoggerFactory.getLogger(Slf4jTest.class);
@Test
public void testSlf4j() {
for (int i = 0; i < 20000; i++) {
//打印日志信息
LOGGER.error("error "+i);
LOGGER.warn("warn "+i);
LOGGER.info("info "+i);
LOGGER.debug("debug "+i);
LOGGER.trace("trace "+i);
}
}
}