logback在SpringBoot中的简单使用
日志记录在springboot中是必不可少的一环,在此记录一下简单配置,以及使用过程。
文章目录
一、添加配置文件,新增配置
1.在resources中新建一个配置文件logback-spring.xml
当然也可以使用其他命名,具体请百度。
2.配置以及内容
具体内容,以及解释在配置文件中写了注释,可以直接在项目中创建配置文件后查阅
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 常量,类似与K - V 键值对,通过${xx}引用。日志存放路径 -->
<property name="log.path" value="logs/test"/>
<!-- 日志输出格式
d{HH:mm:ss.SSS} 日志输出的各式
[%thread] 执行日志的线程
%-5level 五个空格,可以自行调整为自己需要的格式
%logger{20} 输出的日志最大长度
[%method,%line] 调用日志的方法,以及行数
%msg%n" 日志内容,并且换行
-->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
<!-- 日志输出的方式
ConsoleAppender 这个类是控制台输出,不打印到文件中
-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--日志输出的格式引用-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--在此,我们只输出info以及大于info级别以上的的日志-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 系统日志输出
RollingFileAppender 代表滚动日志,我们可以按天或者按月来生成不同的日志文件
-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志存放位置-->
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式
%d{yyyy-MM-dd} 按天生成日志
-->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<!--输出日志的格式-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--过滤器,表示只打印INFO级别的日志-->
<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.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- com.xxx 包下的日志打印则此记录器 -->
<logger name="com.xxx" level="info">
<appender-ref ref="file_info"/>
<appender-ref ref="file_error"/>
</logger>
<!--根日志记录器
不在com.xxx包下的日志则使用此记录器,比如系统级别的,只打印在控制台
-->
<root level="info">
<appender-ref ref="console"/>
</root>
</configuration>
二、使用步骤
1.在成员变量的位置加入这行代码
private Logger logger = LoggerFactory.getLogger(LogController.class);
具体如下
访问一下这个接口,便打印一下当前时间,睡眠2s后继续打印
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author
* @Date 2022/4/21 16:36
* @Describe
**/
@RestController
public class LogController{
private Logger logger = LoggerFactory.getLogger(LogController.class);
@RequestMapping("/testLog")
public void testLog() throws InterruptedException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while (true){
logger.info("当前请求时间{}",simpleDateFormat.format(new Date()));
Thread.sleep(2000);
}
}
}
2.查看日志
在配置文件中,我们打印日志的位置在项目的logs目录下,如果没有这个目录,会自动创建
通过查看日志我们可以看到,日志的格式与下方对应,【时间 线程 方法,行数 日志信息,以及换行】
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
3.如果想打印error级别的日志
@RequestMapping("/test1Log")
public void test1Log() throws InterruptedException {
try {
int i = 1/0;
}catch (Exception e){
e.printStackTrace();
logger.error(e.getMessage(),e);
}
}
日志文件如下
总结
- 文件存放路径要根据自己实际情况修改,win和linux的部署需要区分。
- 配置文件内容例如 包路径"com.xxx"需要修改成自己的路径。
- 检查项目是否有logback的依赖