日志打印:demo代码
文章:SpringBoot - 日志的配置和使用详解(SLF4j、Logback)
SpringBoot - 日志的配置和使用详解(SLF4j、Logback)
1,基本介绍
(1)市面上常见的日志框架有很多。通常情况下,日志是由一个抽象层+实现层的组合来搭建的,而用户通常来说不应该直接使用具体的日志实现类,应该使用日志的抽象层。
抽象层:JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging 实现层:Log4j 、JUL(java.util.logging)、Log4j2、Logback
(2)SpringBoot 默认选择的是 SLF4J + Logback 的组合,如果不需要更改为其他日志系统(如 Log4j2 等),则无需多余的配置,LogBack 默认会将日志打印到控制台上。
由于新建的 Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们无需额外添加依赖。
文章:日志打印 https://xwjie.github.io/rule/log.html#配置nginx
日志框架
全面有效的日志信息记录可以帮助我们全面的监控应用程序的状态,可以通过日志系统监控服务器的状态,记录操作行为以及操作轨迹数据,系统发生错误,事后进行故障分析,快速定位问题。
举个例子,日志系统在我们的项目中就像 城市的道路监控系统 ,城市的道路监控系统能够通过摄像头和其他仪器 记录下来每个红绿灯路口的情况,通过这些信息,可以实时监控各个路口的情况,还可以事后追责。
要在代码中实现类似的功能,就需要用到日志框架了,那么什么是日志框架呢?
SpringBoot 集成 日志
1 日志打印常见概念
什么是日志级别
在项目运行起来之后,会有很多的日志信息输出,这些信息五花八门 即包括你打印的“进入这个方法了”“出去这个方法了”这些意义不大的信息,也包括 用户小明 被多扣了十块钱 这些重要的信息。很明显信息之间的重要程度是不一样的,日志级别就是用来标记 信息重要程度的。
日志的级别划分
日志由低到高 trace<debug<info<warn<error
日志的级别除了区分信息的重要程度,还有一个特别重要的作用是 调整日志信息输出的多少
。
什么意思呢?举例说明
- 你要通过日志输出一句话:“哈哈哈哈哈”。这句话很显然不咋重要,就可以把它的等级设置为 info
- 项目中捕获了异常,想要把异常信息通过日志输出,这个很重要,于是把他标记为了 Error
......就这样,在整个项目中,你标记了 10000 条 info的信息,10个Error的信息,那么项目运行的时候,如果1万多条信息全部输出话,重要的Error信息就会被淹没在不重要的信息中。
看不到重要信息了。咋办嘛?
解决办法是:规定整个项目的日志输出等级为Error即可,代表只有Error和Error以上等级的日志信息才会被输出到控制台,其他info debug等级不够就看不到了。
2 SpringBoot 集成 logback 日志
在SpringBoot中我们使用的第一个日志框架是 logback,logback是啥呢?简单介绍,logback和更加常用的log4j一个爹,是log4j创始人设计的又一个开源日志组件。
logback 日志使用
- 注意:SpringBoot 项目默认已经集成了 logback日志,所以在 SpringBoot 中使用 logback 日志,不需要导jar包,也不需要导入额外的配置文件。
- SpringBoot 中可以直接使用 logback 日志 打印信息
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLog {
/**
* getLogger 参数为当前类的类对象
* org.slf4j.Logger;
* org.slf4j.LoggerFactory;
*/
private static Logger logger = LoggerFactory.getLogger(TestLog.class);
public static void main(String[] args) {
/**
* 通过 Logger 的api打印信息
* 日志的级别;
* 由低到高 trace<debug<info<warn<error
*/
logger.debug("这是日志");
logger.info("这是日志");
logger.warn("这是日志");
logger.error("这是日志");
}
}
SpringBoot修改日志的默认配置
SpringBoot默认给我们使用的是info级别,所有的日志信息都会按照这个标准输入,如果想要修改 就需要修改配置
常见配置
- 根日志级别配置
- 具体某个包的日志级别
#日志配置
#根日志级别配置 整个项目的输出日志的级别 默认是 info
logging.level.root=info
#定义某个包的日志输出级别
logging.level.com.example.demomdc.controller=debug
注意:具体包的日志级别 优先级高于 整个项目的根日志级别,dao包我们定义为了 debug 级别,这时候尽管整个项目的是info,但是dao包相关的日志仍然按照debug级别输出
- 定义日志信息输出到文件
#定义日志信息输出到文件
#logging.path=
#不指定路径在当前项目下生成springboot.log日志
#可以指定完整的路径;
#logging.file=G:/springboot.log
#在当前项目下创建spring文件夹和里面的log文件夹;使用spring.log作为默认文件
logging.file.path=spring.log
#指定文件中日志输出的格式
logging.pattern.file=$d{yyyy-MM-dd} [%thread] %-5level %logger{50} %msg %n
- 在控制台输出的日志的格式
# 在控制台输出的日志的格式
logging.pattern.console=$d{yyyy-MM-dd} [%thread] %-5level %logger{50} %msg %n
日志输出格式
- %d表示日期时间,
- %thread表示线程名,
- %-5level:级别从左显示5个字符宽度
- %logger{50} 表示logger名字最长50个字符,否则按照句点分割。
- %msg:日志消息,
- %n是换行符
以上就是 SpringBoot 项目中使用 logback 日志的正确姿势了。
3 logback独立配置文件【了解内容】
如果在 SpringBoot 中想要单独配置 logback 不使用application配置文件,也非常简单,只需要在项目的 src/resources
目录下导入 logback.xml 配置文件即可。
配置文件示例如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义项目中日志输出位置-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!--定义项目的日志输出格式-->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern>
</layout>
</appender>
<!--项目中跟日志控制-->
<root level="INFO">
<appender-ref ref="stdout"/>
</root>
<!--项目中指定包日志控制-->
<logger name="com.lu.dao" level="DEBUG"/>
</configuration>
4 SpringBoot 集成 log4j 日志
最后简单说一下在SpringBoot 中如何使用log4j日志,注意:推荐使用logback,但是有需要可以切换成log4j。
日志切换的切换不需要 修改 application 配置文件中的日志配置,只需要将 logback 的依赖切换为 log4j 即可
1.将logback的依赖排除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除logback相关的依赖 -->
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
2.导入log4j的依赖
<!--导入log4j的依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
让我们再次回顾本文的学习目标
- 掌握日志的基本概念和作用
- 掌握SpringBoot中日志的使用
- 了解SpringBoot中日志的相关原理