有天上飞的概念, 就要有落地的实现
概念 + 代码实现是本文的特点, 教程将涵盖完整的图文教程, 代码案例
文章结尾配套自测面试题, 学完技术自我测试更扎实
概念十遍不如代码一遍, 朋友, 希望你把文中所有的代码案例都敲一遍
大哥大姐新年好, 点赞转发不要少
SpringBoot 图文系列教程技术大纲
简单说明, 教程分为基础篇, 进阶篇和高级篇
基础篇, 本章力求简单快速的掌握基本的 SpringBoot 使用, 并应用到项目中
进阶篇, 学会 SpringBoot 更多的常见用法以及底层原理
高级篇, 着重介绍 SpringBoot 的与各大场景的整合使用
环境要求
开发工具 IDEA 版本不限
maven3.x
jdk1.8
本教程采用 SpringBoot 2.0.3.RELEASE
SpringBoot 图文教程系列文章目录
SpringBoot 图文教程 1「概念 + 案例 思维导图」「基础篇上」 https://mp.weixin.qq.com/s/phk6j3ChBP-kPtS2xZeEZg
前言 又名: 为啥要有日志
文章内容概要
掌握日志的基本概念和作用
掌握 SpringBoot 中日志的使用
了解 SpringBoot 中日志的相关原理
今天的故事从一艘船说起, 泰坦尼克号, 昨天重温了一下这部经典影片.
不过, 作为钢铁直男程序员的我, 要分享的并不是 You jump,I jump , 而是 咋沉的? 原因咋发现的?
咋沉的? 海市蜃楼碰到冰山了.
我咋知道的? 通过航海日志. 咳咳 是科学家通过航海日志搞定的 (具体情况可以看果壳的分析文章)
航海日志用于记录船的航行数据, 会详细的记录船在航行过程中船的硬件状况, 遇到的天气, 选择的航向, 以及乘客, 货物等等. 而航海日志一直都是总结航海经验和分析海难原因的根据.
类似的其实还有黑匣子, 记录飞机飞行的信息, 通过分析黑匣子的数据可以分析空难的原因. emmm 另外黑匣子不是黑的, 而是红色
黑匣子
航海日志, 黑匣子都是日志记录系统, 通过航海日志, 黑匣子可以
记录系统中的操作
记录系统的运行状况
系统错误时候, 根据日志分析原因
而我们的应用程序, 作为一种 "极其精密, 极其高端 (省略一万字)" 的东西, 也需要类似航海日志和黑匣子的日志记录的功能, 记录系统运行的信息, 出现故障后分析原因, 而在实际开发中完成这个功能的就是日志框架.
日志框架
本节内容为 slf4j log4j 等日志框架的介绍, 可以直接跳过至 SpringBoot 项目集成日志
全面有效的日志信息记录可以帮助我们全面的监控应用程序的状态, 可以通过日志系统监控服务器的状态, 记录操作行为以及操作轨迹数据, 系统发生错误, 事后进行故障分析, 快速定位问题.
举个例子, 日志系统在我们的项目中就像 城市的道路监控系统 , 城市的道路监控系统能够通过摄像头和其他仪器 记录下来每个红绿灯路口的情况, 通过这些信息, 可以实时监控各个路口的情况, 还可以事后追责.
要在代码中实现类似的功能, 就需要用到日志框架了, 那么什么是日志框架呢?
由于日志框架的内容过多, 请阅读我的另一篇文章:「故事系列」小故事说清楚什么是日志框架 https://juejin.im/post/5e46084de51d4526e1493dcd
SpringBoot 集成 日志
日志打印常见概念
如果你一次都没有使用过日志, 请阅读本节内容
你应该记得在 SpringBoot 项目跑起来的时候, 在控制台会出现很多的信息. 这些信息就是系统的日志. 如下图.
在图的最左边有一列 INFO, 这是什么呢? 日志级别.
什么是日志级别
在项目运行起来之后, 会有很多的日志信息输出, 这些信息五花八门 即包括你打印的 "进入这个方法了"" 出去这个方法了 " 这些意义不大的信息, 也包括 用户小明 被多扣了十块钱 这些重要的信息. 很明显信息之间的重要程度是不一样的, 日志级别就是用来标记 信息重要程度的.
举个栗子, 在前段时间, 很多城市 都发布了 一级预警, 预警信息就是国家根据突发事件危害程度不同而划分的信息等级, 分为: 一级, 二级, 三级, 四级.
日志的级别划分
日志由低到高 trace<debug<info<warn<error
日志的级别除了区分信息的重要程度, 还有一个特别重要的作用是 调整日志信息输出的多少.
什么意思呢? 举例说明
你要通过日志输出一句话:"哈哈哈哈哈". 这句话很显然不咋重要, 就可以把它的等级设置为 info
项目中捕获了异常, 想要把异常信息通过日志输出, 这个很重要, 于是把他标记为了 Error
...... 就这样, 在整个项目中, 你标记了 10000 条 info 的信息, 10 个 Error 的信息, 那么项目运行的时候, 如果 1 万多条信息全部输出话, 重要的 Error 信息就会被淹没在不重要的信息中.
看不到重要信息了. 咋办嘛?
解决办法是: 规定整个项目的日志输出等级为 Error 即可, 代表只有 Error 和 Error 以上等级的日志信息才会被输出到控制台, 其他 info debug 等级不够就看不到了.
这张图上只有 INFO 是因为 SpringBoot 项目默认规定的日志等级就是 INFO, 所以比 INFO 等级低的信息都不能输出
SpringBoot 集成 logback 日志
在上一篇教程代码案例的基础上做日志集成, 没有看过上一篇教程的可以直接下载项目案例 地址: boot-hello
在 SpringBoot 中我们使用的第一个日志框架是 logback,logback 是啥呢? 简单介绍, logback 和更加常用的 log4j 一个爹, 是 https://baike.baidu.com/item/log4j/480673 创始人设计的又一个开源日志组件.
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 级别, 所有的日志信息都会按照这个标准输入, 如果想要修改 就需要修改配置
常见配置
根日志级别配置
具体某个包的日志级别
注意: 具体包的日志级别 优先级高于 整个项目的根日志级别, dao 包我们定义为了 debug 级别, 这时候尽管整个项目的是 info, 但是 dao 包相关的日志仍然按照 debug 级别输出
定义日志信息输出到文件
在控制台输出的日志的格式
日志输出格式
%d 表示日期时间,
%thread 表示线程名,
%-5level: 级别从左显示 5 个字符宽度
%logger{50} 表示 logger 名字最长 50 个字符, 否则按照句点分割.
%msg: 日志消息,
%n 是换行符
以上就是 SpringBoot 项目中使用 logback 日志的正确姿势了.
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>
SpringBoot 集成 log4j 日志
最后简单说一下在 SpringBoot 中如何使用 log4j 日志, 注意: 推荐使用 logback, 但是有需要可以切换成 log4j.
日志切换的切换不需要 修改 application 配置文件中的日志配置, 只需要将 logback 的依赖切换为 log4j 即可
1. 将 logback 的依赖排除
2. 导入 log4j 的依赖
关于日志切换的理论基础, 请阅读我的另一篇文章:「故事系列」小故事说清楚什么是日志框架 https://juejin.im/post/5e46084de51d4526e1493dcd
总结
恭喜你完成了本章的学习, 恭喜你掌握了通过 SpringBoot 打印日志的能力. 为你鼓掌!
让我们再次回顾本文的学习目标
掌握日志的基本概念和作用
掌握 SpringBoot 中日志的使用
了解 SpringBoot 中日志的相关原理
要掌握 SpringBoot 更多的用法, 请持续关注本系列教程.
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例, 希望你能够成热打铁, 将知识夯扎实.
上期自测面试题答案
见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测面试题 (答案见下期)
日志的作用
日志的级别
有哪些常见的日志框架
上期自测实现项目小案例答案
见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测实现项目小案例 (答案见下期)
Tip: 在我的计划中, 更新完 SpringBoot 图文教程系列 之后 将会更新 SpringBoot 微服务电商后台管理系统实战开发图文教程
文后所有项目小案例的库表均来自该项目, 通过精心设计, 环环相扣, 通过小案例的铺垫, 后续可以直接与 微服务实战开发教程 无缝兼容
需求
在上期案例代码的基础上增加日志打印
求关注, 求点赞, 求转发
本人拥有两年开发经验和三年 Java 大数据教学经验, 曾帮助 2000 + 学生成功就业和跳槽.
来源: https://www.cnblogs.com/bingyang-py/p/12311072.html