目录

概述

1.我们为什么要使用slf4j

1.1 注意:

1.2 slf4j只做两件事情:

1.3 使用slf4j记录日志

2.application.yml中对日志的配置

3.logback.xml配置文件解析

3.1 定义日志输出格式和存储路径

3.2 定义控制台输出

3.3 定义日志文件的相关参数

3.4 定义日志输出级别

3.4 使用Logger在项目中打印日志


概述

以往的开发中,我们经常使用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,那么四条语句都会打印出来。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐