🔥SpringBoot图文教程2—日志的使用「logback」「log4j」
有天上飞的概念,就要有落地的实现
- 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例
- 文章结尾配套自测面试题,学完技术自我测试更扎实
- 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍
大哥大姐新年好,点赞转发不要少
SpringBoot 图文系列教程技术大纲
简单说明,教程分为基础篇,进阶篇和高级篇
- 基础篇,本章力求简单快速的掌握基本的SpringBoot使用,并应用到项目中
- 进阶篇,学会SpringBoot更多的常见用法以及底层原理
- 高级篇,着重介绍SpringBoot的与各大场景的整合使用
环境要求
- 开发工具 IDEA 版本不限
- maven3.x
- jdk1.8
- 本教程采用SpringBoot 2.0.3.RELEASE
SpringBoot 图文教程系列文章目录
前言 又名:为啥要有日志
文章内容概要
- 掌握日志的基本概念和作用
- 掌握SpringBoot中日志的使用
- 了解SpringBoot中日志的相关原理
今天的故事从一艘船说起,泰坦尼克号,昨天重温了一下这部经典影片。
不过,作为钢铁直男程序员的我,要分享的并不是 You jump,I jump ,而是 咋沉的?原因咋发现的?
咋沉的?海市蜃楼碰到冰山了。
我咋知道的?通过航海日志。咳咳 是科学家通过航海日志搞定的(具体情况可以看果壳的分析文章)
航海日志用于记录船的航行数据,会详细的记录船在航行过程中船的硬件状况,遇到的天气,选择的航向,以及乘客,货物等等。而航海日志一直都是总结航海经验和分析海难原因的根据。
类似的其实还有黑匣子,记录飞机飞行的信息,通过分析黑匣子的数据可以分析空难的原因。emmm 另外黑匣子不是黑的,而是红色
黑匣子
航海日志,黑匣子都是日志记录系统,通过航海日志,黑匣子可以
- 记录系统中的操作
- 记录系统的运行状况
- 系统错误时候,根据日志分析原因
而我们的应用程序,作为一种“极其精密,极其高端(省略一万字)”的东西,也需要类似航海日志和黑匣子的日志记录的功能,记录系统运行的信息,出现故障后分析原因,而在实际开发中完成这个功能的就是日志框架。
日志框架
本节内容为slf4j log4j 等日志框架的介绍,可以直接跳过至 SpringBoot 项目集成日志
全面有效的日志信息记录可以帮助我们全面的监控应用程序的状态,可以通过日志系统监控服务器的状态,记录操作行为以及操作轨迹数据,系统发生错误,事后进行故障分析,快速定位问题。
举个例子,日志系统在我们的项目中就像 城市的道路监控系统 ,城市的道路监控系统能够通过摄像头和其他仪器 记录下来每个红绿灯路口的情况,通过这些信息,可以实时监控各个路口的情况,还可以事后追责。
要在代码中实现类似的功能,就需要用到日志框架了,那么什么是日志框架呢?
由于日志框架的内容过多,请阅读我的另一篇文章:「故事系列」小故事说清楚什么是日志框架
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一个爹,是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级别,所有的日志信息都会按照这个标准输入,如果想要修改 就需要修改配置
常见配置
- 根日志级别配置
- 具体某个包的日志级别
注意:具体包的日志级别 优先级高于 整个项目的根日志级别,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的依赖
关于日志切换的理论基础,请阅读我的另一篇文章:「故事系列」小故事说清楚什么是日志框架
总结
恭喜你完成了本章的学习,恭喜你掌握了通过SpringBoot 打印日志的能力。为你鼓掌!
让我们再次回顾本文的学习目标
- 掌握日志的基本概念和作用
- 掌握SpringBoot中日志的使用
- 了解SpringBoot中日志的相关原理
要掌握SpringBoot更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。
上期自测面试题答案
见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测面试题(答案见下期)
- 日志的作用
- 日志的级别
- 有哪些常见的日志框架
上期自测实现项目小案例答案
见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测实现项目小案例(答案见下期)
Tip:在我的计划中,更新完 SpringBoot 图文教程系列 之后 将会更新 SpringBoot微服务电商后台管理系统实战开发图文教程
文后所有项目小案例的库表均来自该项目,通过精心设计,环环相扣,通过小案例的铺垫,后续可以直接与 微服务实战开发教程 无缝兼容
需求
在上期案例代码的基础上增加日志打印
求关注,求点赞,求转发
本人拥有两年开发经验和三年Java大数据教学经验,曾帮助2000+学生成功就业和跳槽。
欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。
🔥SpringBoot图文教程2—日志的使用「logback」「log4j」的更多相关文章
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- SpringBoot图文教程3—「‘初恋’情结」集成Jsp
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程14—SpringBoot集成EasyExcel「上」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- SpringBoot图文教程5—SpringBoot 中使用Aop
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
随机推荐
- 个性化重排--Personalized Re-ranking for Recommendation
推荐中的个性化重排--Personalized Re-ranking for Recommendation 这篇文章是阿里在ResSys'19发表的,主要贡献是在重排序阶段,引入了用户的相关信息,很符 ...
- JAVA封装、继承、多态
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
- 在A卡下的 Matlab 运行C/C++混编的GPU程序
首先将你的.MEX文件和matlab脚本放在一个文件夹下开始运行 如果出错查看是那个.MEX文件出错 用depends这个软件查看他的依赖dll文件下载对应文件 放到当前文件夹下,运行成功.
- 重拾c++第一天(2):基本语法
1.输出方法: cout<<"输出语句" 2.输出时换行为 cout<<endl or "\n" 3.连续赋值是合法的,从右往左依次赋值 ...
- 一步一步教你PowerBI利用爬虫获取天气数据分析
对于爬虫大家应该不会陌生,我们首先来看一下爬虫的定义:网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分.网络爬虫为搜索引擎从万维网下载网页,自动获取网页内容的应用程序.看到定义我们应该已 ...
- 【Tool】---SVN的超级简单并具体得使用介绍
又一次被打脸,笔者表示再也不相信自己的记性了.简单的SVN隔了一段时间后,由于项目的需要要重新简历代码库,竟然一下子又忘了.天那,这就好比战士上了战场发现没带枪,这能行吗?因此,趁着今天又简短的复习了 ...
- load文件到hive,并保存
DataFrame usersDF = sqlContext.read().load("hdfs://spark1:9000/users.parquet"); usersDF.se ...
- Spring Framework 源码编译导入
预先准备环境 Window 10 JDK环境 List item Gradle 以及其环境变量配置 spring-framework源码(https://gitee.com/mirrors/Sprin ...
- Scrapy深度和优先级
一.深度 配置文件 settings.py DEPTH_LIMIT = 5 二.优先级 配置文件 DEPTH_PRIORITY=1 优先级为正数时,随着深度越大,优先级越低 源码中,优先级 reque ...
- sqlalchemy 多线程 创建session
1.基于threding.local,推荐使用 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine ...