SpringBoot使用slf4j进行日志记录
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
目录
概述
以往的开发中,我们经常使用sout来打印一些信息,大量的使用System.out会增加资源的消耗,SpringBoot提供了一套日志系统,使用slf4j的logback来输出日志,效率高
这里引用百度百科的一段话
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
也就是说:你只需要按统一的方式写记录日志的代码,而无需关心日志是通过哪个日志系统,以什么风格输出的,因为他们取决于部署项目时绑定的日志系统。
1.我们为什么要使用slf4j
我们为什么要使用slf4j,举个例子:
我们自己的系统中使用了logback这个日志系统
我们的系统使用了A.jar,A.jar中使用的日志系统为log4j
我们的系统又使用了B.jar,B.jar中使用的日志系统为slf4j-simple
这样,我们的系统就不得不同时支持并维护logback、log4j、slf4j-simple三种日志框架,非常不便,解决这个问题的方式就是引入一个适配层,由适配层决定使用哪一种日志系统,而调用端只需要做的事情就是打印日志而不需要关心如何打印日志。
1.1 注意:
在项目中使用了slf4j记录日志,并且导入了log4j相应的依赖,则日志会以log4j的风格输出日志,只需要将log4j替换成logback即可,不用修改项目中的代码。
从上面的描述,我们必须清楚地知道一点:slf4j只是一个日志标准,并不是日志系统的具体实现。
1.2 slf4j只做两件事情:
提供日志接口
提供获取具体日志对象的方法
1.3 使用slf4j记录日志
slf4j-simple、logback都是slf4j的具体实现,log4j并不直接实现slf4j,但是有专门的一层桥接slf4j-log4j12来实现slf4j。
使用slf4j记录日志非常简单,直接使用LoggerFactory创建即可。
@RestController
public class GorunalTestContraller {
private final static Logger logger = LoggerFactory.getLogger(GorunalTestContraller.class);
}
2.application.yml中对日志的配置
SpringBoot内部已经集成了slf4j,使用时候需要对slf4j做一下配置,application.yml文件中,我们可以指定日志配置文件logback.xml
logging:
config: classpath:logback.xml
level:
com.example.demo.mapper: trace
logging.config是用来指定项目启动的时候,读取哪个配置文件,这里指定的日志配置文件是根路径下的logback.xml文件,关于日志的相关配置信息,都放在logback.xml文件中了,logging.level是用来指定具体的mapper中日志的输出级别,上面的配置表示com.example.springdemo1.dao包下所有mapper日志输出级别为trace,会将操作数据库的sql打印出来,也可将这个日志级别设置成error,日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG
3.logback.xml配置文件解析
logback.xml文件中主要用来做日志的相关配置,可以定义日志输出的格式、路径、控制台输出格式、文件大小、保存时长等
3.1 定义日志输出格式和存储路径
注意:日志存储的路径必须要是绝对路径
<configuration>
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<property name="FILE_PATH" value="D:\journal\library.%d{yyyy-MM-dd}.%i.log" />
</configuration>
- 定义一个格式,命名为“LOG_PATTER”
- %date表示日期
- %thread表示线程名
- %-5level表示级别从左显示5个字符宽度
- %logger{36}表示logger名字最长36个字符
- %msg表示日志信息
- %n是换行符然后在定义一下名为"FILE_PATH"文件路径,日志都会存储再该路径下
- %i表示第i个文件,当日志文件达到指定大小时,会将日志生成到新的文件里,这里的i就是文件索引。日志文件允许的大小可以设置
3.2 定义控制台输出
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
3.3 定义日志文件的相关参数
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照上面配置的FILE_PATH路径来保存日志 -->
<fileNamePattern>${FILE_PATH}</fileNamePattern>
<!-- 日志保存15天 -->
<maxHistory>15</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 单个日志文件的最大,超过则新建日志文件存储 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- 按照上面配置的LOG_PATTERN来打印日志 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
</configuration>
3.4 定义日志输出级别
<configuration>
<logger name="com.example.springdemo1" level="INFO" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
注意:
这里定义为INFO,针对INFO级别的日志,引用上面定义好的控制台日志输出和日志文件中的参数。
3.4 使用Logger在项目中打印日志
先写一个测试类
mport org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GorunalTestContraller {
private final static Logger logger = LoggerFactory.getLogger(GorunalTestContraller.class);
@RequestMapping("/log")
public String testLog(){
logger.debug("====测试日志debug级别打印====");
logger.info("====测试日志info级别打印====");
logger.error("====测试日志error级别打印");
logger.warn("====测试日志warn级别打印====");
return "success";
}
}
启动该项目,在浏览器中输入http://localhost:8081/log可以看到控制台的日志记录
可以看到debug这条记录并没有打印出来,是因为INFO级别比DEBUG级别高,如果将logback.xml中的日志级别设置成DEBUG,那么四条语句都会打印出来。
更多推荐










所有评论(0)