SpringBoot小知识(2):日志
日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。
1.日志的基础操作
1.1 日志的作用
- 编程期调试代码
- 运营期记录信息:
* 记录日常运营重要信息(峰值流量、平均响应时长……)
* 记录应用报错信息(错误堆栈)
* 记录运维过程数据(扩容、宕机、报警……)
1.2 日志级别
使用方式:
2.快速开发日志对象
2.1 日志门面库
日志门面库
是一种软件设计模式
,它为多种不同的日志记录框架
提供一个统一的接口或抽象层。这种模式允许开发者使用一个通用的API来编写日志记录代码,而不必直接依赖于任何特定的日志框架
实现。
看到这里有很多人可能看不明白,我们用人话讲一下,日志记录框架就是我们经常用到的logback或者log4j,各种类型的日志记录框架应用场景不同,可能开发时候你用到的框架不满足线上的要求,那你此时就需要更换日志记录框架,而如果你使用了日志门面库,此时你只需要如下操作:
- 在开发阶段,你可以选择一个日志实现(如logback),并通过添加相应的依赖和配置文件(如logback.xml)来配置它。
- 切换日志实现:如果你需要更换为另一个日志实现(如log4j),你只需做以下几步:
- 移除当前日志实现(logback)的依赖和配置文件。
- 添加新日志实现(log4j)的依赖和配置文件(如log4j.properties或log4j.xml)。
- 无需修改代码中使用日志门面库API的任何部分。
2.2 日志实现
日志记录框架
是用于记录和管理系统操作事件
的软件组件。它们帮助开发者在程序运行时捕获、存储和分析日志信息,这对于调试、监控和审计系统行为至关重要。以下是一些主流的日志记录框架及其特点,他有如下实现:
- Logback:由Log4j的原开发者之一主导开发,是Spring Boot默认的日志框架,轻量级且性能优秀,功能全面。
- Log4j:一个非常老牌的日志框架,功能强大,可以自定义日志级别、输出格式和目的地等。
- Log4j2:Log4j的升级版,性能和功能上都有所提升,支持异步日志和插件机制。
- JUL(Java Util Logging):Java SE的默认日志框架,功能相对基础,但对于简单的日志需求来说足够用。
2.3 SLF4J
SLF4J
是一个Java日志门面库
,它提供了一个简单而统一的API来记录日志,同时允许最终用户在部署他们的应用程序时插入所需的日志框架。简而言之,SLF4J定义了一个日志记录的接口,然后通过桥接与其他具体的日志框架(如logback、log4j等)进行集成,使得开发者可以在代码中使用SLF4J API,而具体的日志实现则可以在部署时决定。
SLF4J的主要特点包括:
- 简单性:SLF4J提供了一个简单直观的API,使得日志记录变得容易。
- 解耦:由于SLF4J是一个门面,它允许开发者在不了解具体日志实现的情况下编写代码,这使得代码与具体的日志框架解耦。
- 灵活性:开发者可以在运行时选择使用哪种日志系统,例如logback、log4j、java.util.logging等。
- 性能:SLF4J的API设计注重性能,特别是在参数较多的情况下,它允许延迟参数计算,直到日志级别真正启用时才计算参数值。
- 兼容性:SLF4J支持与多种日志框架的桥接,这意味着你可以在项目中轻松切换不同的日志系统。
- 线程安全:SLF4J是线程安全的,可以在多线程环境中使用。
使用SLF4J的基本步骤:
- 添加依赖:在项目的构建配置中添加SLF4J的依赖。
- 配置日志系统:选择并配置一个日志系统,如logback或log4j。
- 编写代码:在代码中使用SLF4J提供的API来记录日志。
- 运行和部署:在部署时,根据需要选择和配置具体的日志实现。
示例代码:
在Controller
层添加slf4j
的注解(lombok提供
),即可在相应的Controller
方法中使用log.
调用API
它由loggerFactory方法获取到:
他有如下方法:
3. 日志的信息
3.1 日志的格式
一个标准的,springboot默认的日志格式输出信息如下:
我们也可以自定义设置日志的输出格式,例如可能有的人不想显示PID的信息,只想知道时间,级别和日志信息,我们就可以手动调整。
logging:level:root: INFOorg.springframework.web: INFOorg.hibernate: WARNpattern:console: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"
属性解释:
- logging.level: 配置日志级别。这里设置了根日志级别为INFO,并为特定的包(如org.springframework.web和org.hibernate)设置了不同的日志级别。
- logging.pattern.console: 配置控制台日志输出格式,格式可以包含:
* %d{yyyy-MM-dd HH:mm:ss}:日志时间戳
* %-5level:日志级别(INFO、DEBUG等),宽度为5
* [%thread]:线程名称
* %logger{36}:日志记录器的名称(通常是类的名称),最多显示36个字符
* %msg:日志消息
* %n:换行
* %throwable:异常堆栈
3.2 输出日志
在配置中我们可以添加file属性来设置输出日志的格式以及位置
logging:level:root: INFOorg.springframework.web: INFOorg.hibernate: WARNpattern:console: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"file: "%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n%throwable"file:name: info.log # 设置日志输出文件路径
- logging.pattern.file: 配置日志文件的输出格式,使用相同的格式。
- logging.file.name: 配置日志文件输出路径,可以指定一个文件名或完整路径。
那么这个文件在哪呢?就在你的项目文件里面,打开就能看到
我重启了几次项目,看看记录的信息:
相关文章:

SpringBoot小知识(2):日志
日志是开发项目中非常重要的一个环节,它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息: * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…...
java虚拟机——jvm是怎么去找垃圾对象的
JVM(Java虚拟机)通过特定的算法和机制来查找和识别垃圾对象,以便进行垃圾回收。以下是JVM查找垃圾对象的主要方法和步骤: 一、可达性分析法 JVM使用可达性分析法来识别垃圾对象。这种方法从一组称为“GC Roots”的对象作为起始点…...

Macos远程连接Linux桌面教程;Ubuntu配置远程桌面;Mac端远程登陆Linux桌面;可能出现的问题
文章目录 1. Ubuntu配置远程桌面2. Mac端远程登陆Linux桌面3. 可能出现的问题1.您用来登录计算机的密码与登录密钥环里的密码不再匹配2. 找不到org->gnome->desktop->remote-access 1. Ubuntu配置远程桌面 打开设置->共享->屏幕共享。勾选允许连接控制屏幕&…...

hadoop_HA高可用
秒懂HA HA概述HDFS-HA工作机制工作要点元数据同步参数配置手动故障转移自动故障转移工作机制相关命令 YARN-HA参数配置自动故障转移机制相关命令 附录Zookeeper详解 HA概述 H(high)A(avilable): 高可用,意味着必须有容错机制,不能因为集群故障…...
【MySQL】MySQL中的函数之JSON_ARRAY_APPEND
在 MySQL 8.0 及更高版本中,JSON_ARRAY_APPEND() 函数用于在 JSON 数组的指定位置追加一个或多个值。这个函数非常有用,特别是在你需要在 JSON 数组的末尾或特定位置添加新的元素时。 基本语法 JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ..…...
torch.is_nonzero(input)
torch.is_nonzero(input) input: 输入张量 若输入是 不等于零的单元素张量 则返回True,否则返回False 不等于零的单元素张量:torch.tensor([0.]) 或 torch.tensor([0]) 或 torch.tensor([False])单元素张量: 只有一个数 的张量 import torch print(t…...
文本搜索程序(Qt)
头文件 #ifndef TEXTFINDER_H #define TEXTFINDER_H#include <QWidget> #include <QFileDialog> #include <QFile> #include <QTextEdit> #include <QLineEdit> #include <QTextStream> #include <QPushButton> #include <QMess…...
使用 Python 剪辑视频的播放速度
要使用 Python 调整视频的播放速度,可以利用 moviepy 库中的 fx(特效)模块来实现这一功能。通过 moviepy.editor 中的 VideoFileClip 类和 fx.speedx 函数,可以轻松地调整视频的播放速度。 安装 moviepy 首先,确保已…...

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接
1.前言 从一个高级语言到可执行程序,要经过预处理、编译,汇编和链接四个过程。大家可以思考下,为什么要有这样的过程? 我们学习计算机之处,就应该了解到,计算机能够识别的只有二进制语言(这是…...
Linux开发者的CI/CD(11)jenkins变量
文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…...
深度学习视频编解码开源项目介绍【持续更新】
DVC (Deep Video Compression) 介绍:DVC (Deep Video Compression) 是一个基于深度学习的视频压缩框架,它的目标是通过深度神经网络来提高视频编码的效率,并降低比特率,同时尽可能保持视频质量。DVC 是一个端到端的神经网络模型&…...
Canva迁移策略深度解析:应对每日5000万素材增长,从MySQL到DynamoDB的蜕变
随着数字化设计的蓬勃发展,Canva作为一款备受欢迎的在线设计平台,面临着日益增长的用户生成内容挑战。每天,平台上新增的素材数量高达5000万,这对数据库系统提出了前所未有的要求。为了应对这一挑战,Canva决定对其数据…...

nacos常见面试题(2024)
nacos永久实例与临时实例区别 nacos实例有2种,分别为临时实例(一般业务服务是临时的)和永久实例(如mysql、redis这种运维服务需要实时看到状态的设置为永久实例)。 临时实例只会缓存到服务注册列表中,下线…...

68000汇编实战01-编程基础
文章目录 简介产生背景应用领域 语言学习EASy68K帮助文档IDE使用 编程语言commentslabels开始标签指令标签位置标签 opcode 操作码常用操作码数据传送算术运算逻辑运算控制流分支跳转地址跳转子程序跳转 位操作比较堆栈操作 IO操作码其他操作码 directives 指令DC指令EQU 指令S…...
你的网站真的安全吗?如何防止网站被攻击?
你的网站被黑客攻击过,很可能不止一次! 这可不是危言耸听。微软最近发布了《2024 年微软数字防御报告》,报告中写到:“Windows 用户每天面临超过 6 亿次网络犯罪和国家级别的攻击,涵盖了从勒索软件到网络钓鱼再到身份…...
UE5 材质编辑器CheapContrast 节点
在 Unreal Engine 材质编辑器中,CheapContrast 节点是一个非常实用的节点,主要用于对图像或纹理的 对比度 进行调整,且执行效率较高,适合在性能要求较高的场景中使用。 CheapContrast 节点的作用 CheapContrast 节点通过调整输入…...

健身房小程序服务渠道开展
健身不单单是锻炼身体、保持身材,也是一种社交方式,城市里门店不少,每家都有一定流量和老客,但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户,而消费者也对门…...
Java基础面试题08:Java中Exception和Error有什么区别?
在Java中,Exception 和 Error 是异常处理体系的两大核心概念。要理解它们的区别和应用,咱们可以逐步剖析。 Exception和Error的基础区别 共同点: 两者都继承自 Throwable 类,只有 Throwable 类型的实例才能被 throw 或 catch。 区…...
什么是axios?怎么使用axios封装Ajax?
学习目标 什么是axios怎么使用axios封装Ajax该如何使用Axios 封装 XHR 请求 什么是axios Axios 是一个基于 Promise 的 HTTP 客户端,它可以在浏览器和 Node.js 环境中使用。Axios 提供了简单易用的 API,用于执行各种 HTTP 请求操作,如 GET、P…...

Web前端学习_CSS盒子模型
content padding border margin <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS盒子模型</title><style></style> </head> <body> <div class"demo&quo…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...