🔥springboot图文教程2—日志的使用「logback」「log4j」

鹿老师的Java笔记      2022-05-10     248

关键词:

技术图片

有天上飞的概念,就要有落地的实现

  • 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例
  • 文章结尾配套自测面试题,学完技术自我测试更扎实
  • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

大哥大姐新年好,点赞转发不要少

SpringBoot 图文系列教程技术大纲

技术图片 简单说明,教程分为基础篇,进阶篇和高级篇

  • 基础篇,本章力求简单快速的掌握基本的SpringBoot使用,并应用到项目中
  • 进阶篇,学会SpringBoot更多的常见用法以及底层原理
  • 高级篇,着重介绍SpringBoot的与各大场景的整合使用

环境要求

  • 开发工具 IDEA 版本不限
  • maven3.x
  • jdk1.8
  • 本教程采用SpringBoot 2.0.3.RELEASE

SpringBoot 图文教程系列文章目录

  1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」

前言 又名:为啥要有日志

文章内容概要

  • 掌握日志的基本概念和作用
  • 掌握SpringBoot中日志的使用
  • 了解SpringBoot中日志的相关原理

今天的故事从一艘船说起,泰坦尼克号,昨天重温了一下这部经典影片。 技术图片

不过,作为钢铁直男程序员的我,要分享的并不是 You jump,I jump ,而是 咋沉的?原因咋发现的?

咋沉的?海市蜃楼碰到冰山了。

我咋知道的?通过航海日志。咳咳 是科学家通过航海日志搞定的(具体情况可以看果壳的分析文章)

航海日志用于记录船的航行数据,会详细的记录船在航行过程中船的硬件状况,遇到的天气,选择的航向,以及乘客,货物等等。而航海日志一直都是总结航海经验和分析海难原因的根据。

类似的其实还有黑匣子,记录飞机飞行的信息,通过分析黑匣子的数据可以分析空难的原因。emmm 另外黑匣子不是黑的,而是红色

技术图片黑匣子

航海日志,黑匣子都是日志记录系统,通过航海日志,黑匣子可以

  • 记录系统中的操作
  • 记录系统的运行状况
  • 系统错误时候,根据日志分析原因

而我们的应用程序,作为一种“极其精密,极其高端(省略一万字)”的东西,也需要类似航海日志和黑匣子的日志记录的功能,记录系统运行的信息,出现故障后分析原因,而在实际开发中完成这个功能的就是日志框架

日志框架

本节内容为slf4j log4j 等日志框架的介绍,可以直接跳过至 SpringBoot 项目集成日志

全面有效的日志信息记录可以帮助我们全面的监控应用程序的状态,可以通过日志系统监控服务器的状态,记录操作行为以及操作轨迹数据,系统发生错误,事后进行故障分析,快速定位问题。

举个例子,日志系统在我们的项目中就像 城市的道路监控系统 ,城市的道路监控系统能够通过摄像头和其他仪器 记录下来每个红绿灯路口的情况,通过这些信息,可以实时监控各个路口的情况,还可以事后追责。 技术图片

要在代码中实现类似的功能,就需要用到日志框架了,那么什么是日志框架呢?

由于日志框架的内容过多,请阅读我的另一篇文章:「故事系列」小故事说清楚什么是日志框架

SpringBoot 集成 日志

日志打印常见概念

如果你一次都没有使用过日志,请阅读本节内容

你应该记得在 SpringBoot 项目跑起来的时候,在控制台会出现很多的信息。这些信息就是系统的日志。如下图。

技术图片

在图的最左边有一列 INFO,这是什么呢?日志级别。

什么是日志级别

在项目运行起来之后,会有很多的日志信息输出,这些信息五花八门 即包括你打印的“进入这个方法了”“出去这个方法了”这些意义不大的信息,也包括 用户小明 被多扣了十块钱 这些重要的信息。很明显信息之间的重要程度是不一样的,日志级别就是用来标记 信息重要程度的

举个栗子,在前段时间,很多城市 都发布了 一级预警,预警信息就是国家根据突发事件危害程度不同而划分的信息等级,分为:一级、二级、三级、四级。 技术图片

日志的级别划分

日志由低到高 trace<debug<info<warn<error

日志的级别除了区分信息的重要程度,还有一个特别重要的作用是 调整日志信息输出的多少。

什么意思呢?举例说明

  1. 你要通过日志输出一句话:“哈哈哈哈哈”。这句话很显然不咋重要,就可以把它的等级设置为 info
  2. 项目中捕获了异常,想要把异常信息通过日志输出,这个很重要,于是把他标记为了 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 日志使用

接下来我们直接开始日志的使用。

  1. 注意:SpringBoot 项目默认已经集成了 logback日志,所以在 SpringBoot 中使用 logback 日志,不需要导jar包,也不需要导入额外的配置文件。

  2. 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级别,所有的日志信息都会按照这个标准输入,如果想要修改 就需要修改配置

常见配置

  1. 根日志级别配置
  2. 具体某个包的日志级别 技术图片

注意:具体包的日志级别 优先级高于 整个项目的根日志级别,dao包我们定义为了 debug 级别,这时候尽管整个项目的是info,但是dao包相关的日志仍然按照debug级别输出

  1. 定义日志信息输出到文件 技术图片

  2. 在控制台输出的日志的格式 技术图片

日志输出格式

  • %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图文教程17—上手就会resttemplate使用指南「getpost」「设置请求头」

...望你把文中所有的代码案例都敲一遍先赞后看,养成习惯SpringBoot图文教程系列文章目录SpringBoot图文教程1—SpringBoot+Mybatis环境搭建SpringBoot图文教程2—日志的使用「logback」「log4j」SpringBoot图文教程3—「‘初恋’情结」集成JspSprin... 查看详情

springboot图文教程4—springboot实现文件上传下载

...有的代码案例都敲一遍大哥大姐新年好,点赞转发不要少SpringBoot图文系列教程技术大纲鹿老师的Java笔记SpringBoot图文教程系列文章目录SpringBoot图文教程1「概念+案例思维导图」「基础篇上」Sp 查看详情

springboot-05-多模块结构项目构建与测试(详细图文教程)idea版(代码片段)

SpringBoot-05-多模块结构项目构建与测试(详细图文教程)IDEA版百度很多博客都不详细,弄了半天才把SpringBoot多模块项目构建开发整的差不多,特地重新创建配置,记录一下,也分享给有需要的人本篇也会非常详细的介绍涉及的... 查看详情

springboot2.0图文教程|集成邮件发送功能

...个人微信公众号:小哈学Java个人网站:https://www.exception.site/springboot/spring-boots-send-mail大家好,后续会间断地奉上一些SpringBoot2.x相关的博文,包括SpringBoot2.x教程和SpringBoot2.x新特性教程相关,如WebFlux等。还有自定义Starter组件的进阶... 查看详情

简单易学的springboot打包成exe文件图文教程

本文章转自:乐字节文章主要讲解:SpringBoot打包成exe程序获取更多Java相关知识可以:点击链接加入裙聊【Java技术交流羊君】:933-873--310暗号:166前言近期做了一个前后端合并的springboot项目,但是要求打成exe文件,提供给不懂... 查看详情

intellijidea下载安装教程和搭建springboot开发环境及踩坑指南(超详细图文教程)

IntellijIDEA下载安装教程和搭建springboot开发环境1、项目实战效果图2、Intellijidea下载地址3、Intellijidea安装指南4、配置Intellijidea环境变量5、JavaSE开发工具包下载地址6、JavaSE开发工具包安装指南7、创建springboot项目8、文件结构目录... 查看详情

mq4万字保姆教程|rabbitmq知识点整理与springboot整合附demo(图文并茂)(代码片段)

...】本文详细的从应用层面上讲解了RabbitMQ的使用以及整合Springboot;对于其概念进行讲解,提供了可以完成日常开发的接口与demo;文章目录导读工作队列1.workQueues轮询分发消息2.消息应答概念自动应答手动应答消息自动... 查看详情

springboot集成elasticseach(代码片段)

...2.对比关系:3.详细说明:4.查出数据的解释 二、SpringBoot集成Elasticseach1.引入依赖2.添加配置3.创建pojo类与索引对应4.SpringData封装了基础的增删改查,自定义增删改查5.测试方法--增删改查如果本篇博客对您有一定的帮... 查看详情

🔥iskindofclass和ismemberofclass(代码片段)

下面代码结果如何?//insertcodehere...BOOLre1=[(id)[NSObjectclass]isKindOfClass:[NSObjectclass]];//1BOOLre2=[(id)[NSObjectclass]isMemberOfClass:[NSObjectclass]];//0BOOLre3=[(id)[XZPersonclass]isKindOfClass:[XZP 查看详情

githubpages+hexo建站图文教程(代码片段)

文章目录1.GithubPagses服务2.环境准备2-1.免安装Hexo2-2.安装Git、NodeJs2-3.配置Git3.Hexo建站初始化4.HexoDeploy部署4-1.部署配置4-2.生成文件并部署4-3.访问服务5.博客个性化5-1.博文新建删除5-2.个性化主题6.line.mathAllisnotfunction报错1.GithubPagses... 查看详情

nmap使用教程图文教程(超详细)(代码片段)

Nmap使用教程一、端口扫描1.指定端口2.指定扫描方式2.1TCP全连接扫描2.2SYN半链接扫描2.3隐秘扫描二、主机探测三、服务识别四、系统识别五、扫描结果导出kali的命令行中可以直接使用nmap命令,打开一个「终端」,输入nmap... 查看详情

傻瓜式教程windows下安装hivemysql版附安装hadoop教程全网最详细的图文教程(代码片段)

目录一定要先看的前言1安装Hadoop1.1下载并解压资源1.2配置系统变量和环境变量1.2.1系统变量1.2.2环境变量1.2.3测试1.3复制文件1.4修改配置文件1.4.1创建目录1.4.2修改5个文件1.5格式化HDFS1.6开启四个进程1.7测试HadoopDFS2安装HiveMySQL版本2... 查看详情

🔥🔥如何令自己所写的对象具有拷贝功能?(代码片段)

实现NSCoping协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现NSCopying与NSMutableCopying协议。@protocolNSCopying-(id)copyWithZone:(nullableNSZone*)zone;@end@protocolNSMutableCopying-(id)mutableCopyWithZone:(nullableNSZone*) 查看详情

《springboot系列十三》:图文精讲@conditional条件装配实现原理(代码片段)

...ames`吗?**五、总结一、前言在前一篇博文:《SpringBoot启动流程六》:SpringBoot自动装配时做条件装配的原理(两万字图文源码分析) 查看详情

springboot项目集成xxljob全纪录(图文详解)(代码片段)

目录xxljob介绍优点特性如下:代码配置过程1.引入xxl-job的依赖2.编写配置文件3.编写配置类4.新建Job文件夹,将自己写的类放到此文件夹下5.编写业务代码登录xxl-Job并配置1.执行器管理--新增执行器 2.任务管理--新增任务 ... 查看详情

wordpress建站2.七牛云备份wordpress网站图文教程

1.宝塔面板下载七牛云2.注册七牛云​​https://portal.qiniu.com/​​实名制和绑定好改绑定的东西3.记住七牛云的AK,SK4.新建七牛云空间对象存储->空间管理->新建空间5.七牛云绑定自定义加速域名上面的图点击域名,自定义域名... 查看详情

echarts使用教程(图文教程--版本4.6.0)

武汉加油----冲鸭,雄起!!!成都兄弟挺你!文章目录​​武汉加油----冲鸭,雄起!!!​​​​成都兄弟挺你!​​​​1.ECharts概述​​​​1.1ECharts介绍​​​​1.2安装使用​​​​1.3ECharts语法​​​​1.4option配置组件设... 查看详情

🔥🔥造成循环引用和内存泄漏的几种情况

原文地址:http://www.cnblogs.com/wengzilin/p/4347974.htmlARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露。导致iOS对象无法按预期释放的一个无形杀手是——循环引用。循环引用可以简单理解... 查看详情