七、SpringBoot日志

news2024/9/21 12:26:29

1. 得到日志对象

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//打印日志
@Controller
@ResponseBody//设置当前类中所有方法返回的是数据而不是页面
public class UserController {
//1.通过日志门面得到日志对象
private static final Logger logger = LoggerFactory.getLogger(UserController.class);

SpringBoot内置了日志框架Slf4j ,我们可以直接在程序中调用Slf4j 来输出日志,在程序中获取日志对象需要使用日志工厂LoggerFactory, logger对象是属于org.slf4j包下的

2. 打印日志 

package com.example.springboot.Blog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

//打印日志
@Controller
@ResponseBody//设置当前类中所有方法返回的是数据而不是页面
public class UserController {
    //1.得到日志对象
    //日志的命名一般以类名来命名UserController.class
    private static final Logger logger =LoggerFactory.getLogger(UserController.class);
    @RequestMapping("printBlog")
    public String Hi(){
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        return "SpringBoot Blog";
    }
}

执行程序后

发现只打印了三个。是因为SpringBoot有一个默认级别,当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出。

3. 日志信息

4. 日志框架(know about)

slf4j是一个日志门面,不是一个真正的日志框架,  SLF4J是门面模式的典型应用(但不仅仅使⽤了门面模式),默认调用java的logback日志的实现类。 log4j是一个日志框架。

4.1 门面模式(以前学过的单例模式,工厂模式)
思想:
(a)以开关灯为例,先定义一个顶层接口包含两个抽象方法off()和on()开关灯
(b)定义三个类实现开关灯接口,餐厅、走廊、卧室其中有具体的开关灯实现方法
(c)定义一个门面类,创建餐厅、走廊、卧室的对象,通过调用这些不同对象的实现方法来完成灯的统一关闭和打开

门面模式(FacadePattern)又称为外观模式,提供了⼀个统⼀的接口,用来访问子系统中的⼀群接口. 其主要特征是定义了⼀个高层接口,让子系统更容易使用.

门面模式的优点
减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它 的客⼾端;
提高了灵活性,简化了客户端对⼦系统的使用难度,客⼾端⽆需关心子系统的具体实现⽅式,⽽只需 要和门面对象交互即可.
提高了安全性.可以灵活设定访问权限,不在门面对象中开通方法,就⽆法访问
日志门面直接为程开发者提供服务,开发者不能直接进行日志实现,这样可以解耦合。日志门面相当于中间平台,日志实现的方法可能会不相同,开发者只要通过日志门面就可以统一的使用日志功能

5. 日志级别

⽇志的级别分为:
trace:微量,少许的意思,级别最低; 
debug:需要调试时候的关键信息打印; 
info:普通的打印信息(默认⽇志级别); 
warn:警告,不影响使⽤,但需要注意的问题;
error:错误信息,级别较高的错误日志信息,  但仍然不影响系统的继续运行
fatal:致命的,  表示需要立即被处理的系统级错误, 因为代码异常导致程序退出执行的事件。
作用:
    快速筛选重要日志: 日志级别可以帮助我们只查看关注的点,日志级别为error, 就可以只看程序的报错日志
System. out.print1n 对比  日志框架的缺点
1.sout打印信息不全(没有打印日志的时间、没有打印日志的来源)
2.不能实现日志打印的隐藏和显示

6.日志级别设置

6.1 设置整个项目的日志级别
logging:
#设置日志级别为debug,可以打印debug及以上的日志级别
    level:
        root: debug

root表示根目录,表示整个项目的日志级别

6.2 指定类设置日志级别
设置根目录下com.example.springboot.blog的UserController类的日志级别为error
logging:
#针对不同的目录打印不同的日志级别
com:
 example:
   springboot:
          Blog:
            UserController:error

7. 日志持久化

以上打印的日志都是在控制台,程序有一旦关闭,日志就会结束打印。因此需要将日志持久化,将日志保存下来(存入磁盘)。

7.1 设置日志的保存目录
可以看见生成了一个日志文件,里面只保存跟日志相关的内容。日志信息是追加的,前面的不会删除。

7.2 设置日志⽂件的⽂件名
# 设置⽇志⽂件的⽂件名
logging:
    file:
        name: G:\\IDEA java\\java-ee\\logs\\spring.log

logging.file.name 和logging.file.path 两个都配置的情况下,只生效其⼀,以logging.file.name 为准。

直接只填写日志文件名字的话,日志文件保存在pom.xml文件的同一个目录中

8. 日志文件的分割

#日志文件分割
  logback:
    rollingpolicy:
      #日志分割格式:⽇志分割后的⽂件名格式:⽇志名.⽇期.索引
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
      #日志分割条件:达到10kb后就存放到下一个文件中去
      max-file-size: 10KB

9. 使用@Slf4j注解:更加简单的日志打印

lombok的@Slf4j
直接加上 @ Slf4j注解,会自动帮我们生成日志对象,直接使用即可
@Slf4j注解在源代码编译成字节码文件后, @Slf4j注解消失,但是在类的内部生成
private static final Logger logger LoggerFactory. getLogger (UserController. class ) @Slf4j注解作用相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1948244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue实战教程】之Vue工程化项目详解

Vue工程化项目 随着多年的发展,前端越来越模块化、组件化、工程化,这是前端发展的大趋势。webpack是目前用于构建前端工程化项目的主流工具之一,也正变得越来越重要。本章节我们来详细讲解一下如何使用webpack搭建Vue工程化项目。 1 使用we…

Web渗透-WAF绕过技巧

一、WAF简介 Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略…

叮!2024 龙蜥操作系统大会议题征集正式启动

定啦!2024 龙蜥操作系统大会(OpenAnolis Conference,以下简称“龙蜥大会”)将于 2024 年 8 月 30 日在北京中关村国家自主创新示范区会议中心盛大召开。 2024 龙蜥大会由中关村科学城管委会、海淀区委网信办、中国开源软件推进联…

配置sublime的中的C++编译器(.sublime-build),实现C++20

GCC 4.8: 支持 C11 (部分) GCC 4.9: 支持 C11 和 C14 (部分) GCC 5: 完全支持 C14 GCC 6: 支持 C14 和 C17 (部分) GCC 7: 支持 C17 (大部分) GCC 8: 完全支持 C17,部分支持 C20 GCC 9: 支持更多的 C20 特性 GCC 10: 支持大部分 C20 特性 GCC 11: 更全面地支持 C20 …

uniapp开发精选短视频视频小程序实战笔记20240725,实现顶部轮播图和热门短剧

创建项目 创建项目,叫video_app。 在pages.json里面修改一下标题: 新建search搜索页面和me我的页面。 此时界面预览效果如下: 引入静态资源 主要是static里面的内容,全部复制过来。 配置底部导航栏 pages.json,放到顶层,和全部样式同级: "tabBar&quo…

Java的类加载机制

Java的类加载机制是指将类的字节码文件(.class文件)加载到JVM中并将其转换为Class对象的过程。这个过程由类加载器(ClassLoader)完成。Java的类加载机制具有动态性和灵活性,使得Java能够支持动态加载类、实现模块化开发…

4s店客户管理系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,门店管理,车展管理,汽车品牌管理,新闻头条管理,预约试驾管理,我的收藏管理,系统管理 微信端账号功能包括&a…

HTTP请求入参类型解读

HTTP请求入参类型解读 Content-Type 在HTTP请求中,Content-Type请求头用于指示资源的MIME类型,即请求体的媒体类型。它告诉服务器实际发送的数据类型是什么,以便服务器能够正确地解析和处理这些数据。Content-Type可以有多种值,…

13.2 MongoDB

13.2 MongoDB 1. 概述2. docker安装3. SpringBoot整合MongoDB3.1 依赖3.2 配置连接1. 基于`yml`配置2. 基于配置类配置3.3 启动项坑1坑23.4 新增业务1. 实体类映射2. 数据层3. 业务层4. 控制层5. 测试结果3.5 单条记录查询业务1. 数据层2. 业务层3. 控制层4. 断点测试3.6 分页查…

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和

文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…

FoundationDB 基本使用

目录 一、FoundationDB介绍 二、安装单机版FoundationDB 2.1 下载安装程序 2.2 安装FoundationDB 2.3 修改配置信息 2.4 管理FoundationDB服务 三、fdbcli的常用命令 3.1连接数据库 3.2退出fdbcli 3.3查看版本 3.4 写模式 3.5写入键值 3.6读取键值 3.7删除键值 …

花几千上万学习Java,真没必要!(二十七)

1、Math类: package mathtest.com; public class MathDemo { public static void main(String[] args) { // 定义圆的半径 double radius 5.0; // 计算并打印圆的周长 double circumference 2 * Math.PI * radius; System.out.printf("圆的周长: %.2f…

Vue 状态管理 Vue CLI

Vue 状态管理 & Vue CLI 1、状态管理2、集中状态管理2.1 Vuex2.1.1 Vuex核心概念2.1.2 Vuex Store实例2.1.3 Vuex Getter2.1.4 Vuex Mutation2.1.4 Vuex Actions2.1.4 Vuex Module 2.2 Pinia2.2.1功能增强 3、Vuex 实现原理4、Pinia 实现原理5、CLI5.1 实现 1、状态管理 将…

【机器学习】激活函数:神经网络的灵魂

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 激活函数:神经网络的灵魂什么是激活函数?常见激活函数类型1. Sigmo…

Linux环境安装KubeSphere容器云平台并实现远程访问Web UI 界面

文章目录 前言1. 部署KubeSphere2. 本地测试访问3. Linux 安装Cpolar4. 配置KubeSphere公网访问地址5. 公网远程访问KubeSphere6. 固定KubeSphere公网地址 前言 本文主要介绍如何在Linux CentOS搭建KubeSphere并结合Cpolar内网穿透工具,实现远程访问,根…

UE4调试UE4Editor-Cmd.exe

在工作中,我们看到这样的构建命令: %EnginePath%\Binaries\Win64\UE4Editor-Cmd.exe %ClientPath%\%ProjectName%.uproject -runHotPatcher {其它参数} 我们应该如何调试UE4Editor-Cmd.exe呢?其实调试 UE4Editor.exe 就可以了(参考…

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本,你可以使用以下命令来设置默认的Python版本: # 首先找到新安…

IDEA安装并使用通义灵码

IDEA安装并使用通义灵码 通义灵码介绍安装通义灵码 通义灵码介绍 在数字革命的前沿,阿里云技术团队匠心独运,倾力打造“通义灵码”——一个融合尖端科技的智能编码助手,旨在革新软件工程的未来。 实时代码扩展 通义灵码具备深度理解代码脉络的…

opencascade AIS_Line源码学习

前言 AIS_Line 是 OpenCASCADE 库中的一个类,用于表示和操作三维直线。它可以通过几何线(Geom_Line)或者两个几何点(Geom_Point)来初始化。 方法 1 //! 初始化直线 aLine。 Standard_EXPORT AIS_Line(const Handl…

8.0.32 mysql 配置主从数据库

配置前提: 两台服务器都需要安装同一版本的mysql数据库 我的版本是8.0.32 数据库参数修改 主数据库my.cnf(linux)或my.ini(win)配置: 这里需要注意:server-id必须唯一主从两个库必须要不一样 log_binmysql-bin server-id24 gtid-modeON …