目录
1.导入依赖
2.编写配置
3.使用
4.验证
5.打印错误信息
1.导入依赖
<!-- logback,向下兼容log4j,还支持SLF4J-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
2.编写配置
包括配置颜色字体,保存的位置等
在日志存放路径这栏,我设置存放在d盘log文件夹
主文件生成.log类型,info跟error生成txt文件
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 日志存放路径 -->
<property name="log.path" value="D:/log"/>
<!-- 日志输出格式 -->
<property name="log.pattern"
value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr([%X{mdcTraceId},%X{mdcTraceNum}]){magenta} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%20.20t]){faint} %clr(%-40.40logger{39}){cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="file.log.pattern"
value="%d{${yyyy-MM-dd HH:mm:ss.SSS}} [%X{mdcTraceId},%X{mdcTraceNum}] ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- <springProperty scope="context" name="logFileName" source="spring.application.name" defaultValue="currentLog"/>-->
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 全局日志输出 -->
<appender name="file_application" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/application</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.path}/application/application.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>1</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${file.log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.txt</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info/%d{yyyy-MM-dd}-%i.txt</fileNamePattern>
<!-- 每个文件最大值 -->
<maxFileSize>10MB</maxFileSize>
<!-- 最多保存30天的日志 -->
<maxHistory>15</maxHistory>
<!-- 最大限制 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${file.log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.txt</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error/%d{yyyy-MM-dd}-%i.txt</fileNamePattern>
<!-- 每个文件最大值 -->
<maxFileSize>10MB</maxFileSize>
<!-- 最多保存30天的日志 -->
<maxHistory>15</maxHistory>
<!-- 最大限制 -->
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${file.log.pattern}</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.org.sys" level="debug"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn"/>
<logger name="com.zaxxer.hikari" level="warn"/>
<logger name="io.lettuce.core" level="warn"/>
<logger name="io.seata.core" level="warn"/>
<logger name="com.netflix.loadbalancer" level="warn"/>
<root level="info">
<appender-ref ref="console"/>
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_application"/>
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</root>
</configuration>
3.使用
两种方法1.类上加注解2.通过LoggerFactory创建
需要注意的是使用类上加@Slf4j注解的方式需要依赖lombok,所以要导入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
@RestController
@RequestMapping("/test")
@CrossOrigin
@Slf4j
public class TestController {
// 编辑xml配置文件 controller层表明使用 通过logger.info进行打印显示
private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@RepeatSubmit
@PostMapping("/test")
public String login() {
User user = new User();
user.setName("日志记录人");
log.info("测试注解@Slf4j的使用,{}",JSON.toJSONString(user));
logger.info("打印日志信息{}", JSON.toJSONString(user));
return "你好啊,doPost方法";
}
}
4.验证
postman接口测试
控制台打印出来的日志
本地log文件夹保存的日志
5.打印错误信息
使用: log.error() 或者 logger.error()
public String login() {
User user = new User();
user.setName("日志记录人");
log.info("测试注解@Slf4j的使用,{}",JSON.toJSONString(user));
logger.info("打印日志信息{}", JSON.toJSONString(user));
log.error("错误信息");
logger.error("错误信息");
return "你好啊,doPost方法";
}
控制台打印
这时候去log文件夹下的err.txt里面看或者application.log看
error.txt
application.log
区别:application总的,err和info是根据分类进行存储。