【JavaEE】SpringBoot的日志

目录

日志作用

SpringBoot日志框架

日志打印

日志级别

类型

作用

修改级别

日志永久化

配置日志文件目录

配置日志文件名

简化日志打印和永久化——lombok


日志作用

  1. 问题定位:可以帮助开发人员快速找到问题出现的位置
  2. 系统监控:可以把系统的运行情况、性能调优等信息记录下来,方便系统监控和性能调优
  3. 记录历史:记录一些关键操作、异常情况,方便追溯问题根源
  4. 程序调试:记录日志来了解程序运行的情况,从而更方便的进行调试
  5. 安全审计:记录用户行为,找到恶意用户,以保证系统的安全性

SpringBoot日志框架

日志门面:是一个抽象层,它提供了统一的日志接口,使应用程序能够按照一致的方式记录日志,而不需要关心具体的日志实现。在应用程序中使用日志门面接口编写代码,使得应用程序可以在运行时动态地切换具体的日志实现,而不需要修改代码。其中SpringBoot使用的是slf4j

日志实现:是实现了日志门面接口的具体日志框架,应用程序在运行时通过配置文件指定所需要的具体日志实现,日志门面就会调用相应的日志实现来记录日志信息。其中SpringBoot使用的是logback


日志打印

因为日志是为当前类服务的,所以使用private

因为static就可以让整个类共享该成员,而不用每创建一个实例就创建一个新的日志类;同时在多线程情况下,使用static就可以避免出现线程安全情况

使用final主要是为了日志对象被修改,从而保证日志的正确性和可靠性。

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class LogController {
    private static final Logger logger = LoggerFactory.getLogger(LogController.class);
    @RequestMapping("/log")
    public void testLog() {
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
    }

}

登录localhost:9999/test/log 即可看到该日志。但是只显示了info warn error,这就与下面的日志级别有关系了。

使用LogController.class打印的日志

 

使用"LogController"打印的日志


日志级别

类型

有小到大依次为:

  1. trace:调试代码时输出程序执行的详细信息
  2. debug:输出运行时的调试信息,帮助程序员定位到应用程序的问题
  3. info:输出一些重要的事件级别,比如程序启动、用户操作等。一般用于记录程序运行状态和关键操作的结果。INFO级别的日志通常会被用于监控应用程序的运行状态,以便及时发现和处理问题。
  4. warn:输出一些警告信息,表明系统出现了一些潜在的问题,但并不影响系统正常的运行。WARN级别的日志通常需要引起注意,但不需要立即采取行动,可以在相应的时候再进行处理。
  5. error:输出一些错误信息,表明系统出现了一些严重的问题,需要立即采取行动来解决。ERROR级别的日志通常用于记录系统崩溃、网络连接异常、SQL执行错误等严重的问题,对于保障系统的正常运行和及时发现问题非常重要。
  6. fatal:因为代码异常而导致程序退出的事件(不会出现在日志中)。

作用

  1. 控制日志输出的详细程度
    通过设置不同的日志级别,可以根据实际情况控制应用程序输出的日志内容的详细程度,避免输出过多或过少的日志。打印信息的时候只会打印设置当前日志级别和高于设置的日志。比如SpringBoot默认设置的是info,所以我们只能看到info、warn和error信息
  2. 帮助排查应用程序的问题
    在应用程序出现问题时,可以通过查看日志文件中相应级别的日志信息来定位问题所在,例如DEBUG级别的日志可以帮助我们追踪应用程序的执行过程,ERROR级别的日志可以帮助我们快速定位错误信息等。
  3. 提高性能
    日志输出是一项相对较为耗时的操作,设置合适的日志级别可以避免无谓的日志输出,提高应用程序的性能和效率。

修改级别

在配置文件中修改日志级别,现在来修改一下上一个程序的日志级别

logging:
  level:
    root: error
    com:
      example:
        demo:
          controller: trace  #把当前测试的包设置成最小的trace


日志永久化

上述的日志只是打印在了控制台上,并没有记录到文件(持久化)当中,这显然是不科学的。把日志记录到文件中需要需要在配置文件中修改。

配置日志文件目录

logging:
  file:
    # \\ 防止被当成转移字符
    path: D:\\Test\\Log
  level:
    root: error
    com:
      example:
        demo:
          controller: trace

配置日志文件名

logging:
  file:
    # \\ 防止被当成转移字符
    name: D:\\Test\\Log\\spring2.log
  level:
    root: error
    com:
      example:
        demo:
          controller: trace


简化日志打印和永久化——lombok

输出日志的对象默认是log,这是slf4j中提供的对象。

package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/testlombok")
@Slf4j
public class LogLombokController {
    @RequestMapping("/log")
    public void testLog() {
        log.trace("trace");
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
    }

}


有什么错误评论区指出。希望可以帮到你。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跳跃游戏类题目 总结篇

一.跳跃游戏类题目简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr,从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到达某…

结构型模式-组合模式

组合模式 概述 ​ 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。…

计算机组成原理4.2.2汉明码

编码的最小距离 奇校验和偶校验 看1的个数是奇数 还是偶数 汉明码 汉明码的配置 根据不等式,确定增添几位,根据指数放置增添位 汉明码的检错 分不同检测小组 分组规则:哪位为’1‘就是哪组元素。 1号位为‘1’的都是第一组元素&#…

基于COM组件实现C#调用C++类对象过程中的注意事项

目录 一、基于COM的调用原理二、注意事项如何在C ATL中有效添加方法与属性如何让C#调用C中的属性(.idl中声明属性)如何对变量类型进行转换C#如何获取C类中的参数变量 一、基于COM的调用原理 调用原理:首先基于C ATL模板类,实现需…

【网络进阶】服务器模型Reactor与Proactor

文章目录 1. Reactor模型2. Proactor模型3. 同步IO模拟Proactor模型 在高并发编程和网络连接的消息处理中,通常可分为两个阶段:等待消息就绪和消息处理。当使用默认的阻塞套接字时(例如每个线程专门处理一个连接),这两…

【redis】redis分布式锁(二)可重入锁+设计模式

【redis】redis分布式锁(二)可重入锁 文章目录 【redis】redis分布式锁(二)可重入锁前言一、可重入锁(又名递归锁)1、说明:2、分开解释:3、可重入锁的种类隐式锁(即synch…

【软件测试】测试用例的设计

文章目录 一. 针对没有需求的案例来设计测试用例二. 针对有需求的案例来设计测试用例1. 穷举法2. 等价类3. 边界值4. 判定表法5. 场景设计法5.1 简介5.2 基本设计步骤5.3 基本流和备选流5.4 使用场景5.5 优缺点5.6 实例 6. 错误猜测法 一. 针对没有需求的案例来设计测试用例 针…

深度强化学习——蒙特卡洛算法(6)

注:本章的内容作为补充插曲,大家可以选看,不过还是建议把最后一个使用蒙特卡洛近似求期望稍微看一下 蒙特卡洛是一大堆随机算法,通过随机样本来估算真实值 使用随机样本来近似Π 1、在[a,b]做随机均匀抽样,抽出n个样…

YOLO物体检测系列1.经典方法概述及评价指标体现

1. 深度学习经典检测方法: two-stage(两阶段): Faster-rcnn Mask-RCNN系列 one-stage(单阶段):Yolo系列 两阶段:一阶段实现RPN候选区域预选 二阶段基于候选区域再进行检测回归分类任务 单阶段:一个CNN卷积网络实现检测…

C++线程的简单学习及了解

此篇文章只是线程的简单了解。 文章目录 前言一、线程的优缺点二、C线程库 1.thread类的简单介绍2.线程函数参数总结 前言 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控…

day3 TCP/IP协议与五层体系结构

TCP / IP 四层体系结构 TCP / IP工作流程: 现在互联网使用的 TCP/IP 体系结构已经发生了演变,即某些应用程序可以直接使用 IP 层,或甚至直接使用最下面的网络接口层。 沙漏型展示: 五层体系结构 各层的主要功能 应用层&#xff1…

搭建外网minecraft服务器方案

很多minecraft服务器主都想自己搭建一个外网可以访问的minecraft服务器,在没有外网IP的情况下,一般都是使用Logmein Hamachi方案。这种方案有它的弊端,需要客户机安装Hamachi,十分不方便。另外,免费版只支持5人&#x…

mysql如何加行锁

一、概述 InnoDB 引擎是支持行级锁的,而 MyISAM 引擎并不支持行级锁,所以后面的内容都是基于 InnoDB 引擎的。当我们使用delete、update进行数据库删除、更新的时候,数据库会自动加上行锁。但是,行锁有时也会失效。 数据库版本&a…

笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

计算机网络体系结构 计算机网络是一个复杂的、具有综合性技术的系统,它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构,使计算机网络系统有条不紊地处理工作,需要定义一种较好的…

CH9121网络串口透传应用

概述 随着物联网技术的普及,越来越多的传统设备出现联网功能需求。串口作为使用较为广泛的一种通信接口,串口转以太网,进行远程数据传输需求逐渐显现出来。CH9121内部集成TCP/IP协议栈,无需编程,即可轻松实现网络数据…

【SWAT水文模型】SWAT水文模型建立及应用第二期:土地利用数据的准备

SWAT水文模型建立及应用:土地利用数据的准备 1 简介2 土地利用数据的下载2.1 数据下载方式2.1.1 中科院1km土地利用数据2.1.2 清华大学高精度土地利用数据 2.2 数据下载 3 土地利用数据的准备3.1 矢量转栅格3.2 土地利用类型的重分类3.3 土地利用分布图投影调整3.4 …

【LeetCode】213. 打家劫舍 II

213. 打家劫舍 II(中等) 思路 这道题是 198.打家劫舍 的拓展版,区别在于:本题的房间是环形排列,而198.题中的房间是单排排列。 将房间环形排列,意味着第一间房间和最后一间房间不能同时盗窃,因…

EPIT定时器实验(一)

EPIT定时器简介 EPIT:Enhanced Periodic Interrupt Timer,直译就是增强的周期中断定时器,它主要完成周期性中断定时的。 STM32里面的定时器有很多其它功能,比如输入捕获、PWM输出等,但是I.MX6U的的EPIT定时器只是完成…

【五一创作】数据可视化之美 ( 三 ) - 动图展示 ( Python Matlab )

1 Introduction 在我们科研学习、工作生产中,将数据完美展现出来尤为重要。 数据可视化是以数据为视角,探索世界。我们真正想要的是 — 数据视觉,以数据为工具,以可视化为手段,目的是描述真实,探索世界。 …

CSS布局之圣杯布局/双飞翼布局

📝个人主页:爱吃炫迈 💌系列专栏:HTMLCSS 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 圣杯布局HTML代码步骤CSS代码 双飞翼布局HTML代码步骤CSS代码 小结 圣杯布局 HTM…