SpringBoot—日志

目录

  • 日志
    • 使用日志
    • 日志级别
      • 设置日志级别
      • 设置分组
      • 指定日志文件路径
      • 日志切割归档
      • 使用第三方日志框架
        • log4j2配置文件【分级存储】
        • logback配置文件【分级存储】
      • 实例代码

日志

使用日志

给controller添加日志信息

要给controller类上添加@Slf4j注解,然后使用log.info(),log.debug(),log.error()等输出日志信息

代码:

@RestController
@Slf4j
public class HaController {//一个类可以有一个日志记录器,他可以被@Slf4j代替//Logger logger = LoggerFactory.getLogger(getClass());@GetMapping("/haha")public String haha(){//打印日志信息log.info("/haha请求进来了");//logger.info("/haha请求进来了");return "哈哈哈";}
}

日志级别

只会打印指定级别以上级别的日志信息

  • 由低到高:ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF

  • ALL:打印所有日志

  • TRACE:追踪框架详细流程日志,一般不使用

  • DEBUG:开发调试细节日志

  • INFO:关键、感兴趣信息日志

  • WARN:警告但不是错误的信息日志,比如:版本过时

  • ERROR:业务错误日志,比如出现各种异常

  • FATAL:致命错误日志,比如jvm系统崩溃

  • OFF:关闭所有日志记录

设置日志级别

在properties或者yaml文件中设置日志级别

实例代码

精确到某一个包下

# 将精确到“com.hyp.uselogging.controller”下的包的日志级别设置为debug
logging.level.com.hyp.uselogging.controller=debug
# 将没有精确包的日志级别设置root
logging.level.root=info

为精确某一个包,在根包下

# 如果想修改多个包的日志级别,将他们都修改为info级别
# 一个一个修改太麻烦,springBoot提供了分组功能
logging.level.com.hyp.uselogging.controller.service=debug
logging.level.com.hyp.uselogging.controller.mapping=info

设置分组

可能会遇到给不同包设置级别,一个一个设置太麻烦,所以进行分组

# 如果想修改多个包的日志级别,将他们都修改为info级别
# 一个一个修改太麻烦,springBoot提供了分组功能
logging.level.com.hyp.uselogging.controller.service=debug
logging.level.com.hyp.uselogging.controller.mapping=info
# 分组,起名为a组,包含的包在=后面
logging.group.a=com.hyp.uselogging.controller,com.hyp.uselogging.mapping
# 设置级别,给A组包中的日志级别全设置为info
logging.level.a=info
# 注意 springBoot给我们提供了两个预设组,sql和web

指定日志文件路径

将日志文件保存到指定目录中

# 指定日志文件路径
# 如果只指定路径,日志文件名就会使用默认名称 spring.log
logging.file.path=D:\\# 使用logging.file.name
logging.file.name=D:\\demo.log
# 如果只规定文件名
# 会自动将这个文件存放在项目的根路径下
logging.file.name=demo.log

日志切割归档

  • 归档: 将每天的日志文件放在一个文件中
  • 切割: 将大小大于某个值的文件分割成多个文件 默认大小是10M
# 日志切割归档# 日志归档,默认格式为 :日志文件名.年.月.日.第几个文件.gz
logging.logback.rollingpolicy.file-name-pattern
# 日志切割,默认为10M 一旦一个日志文件超过了10M,就要进行切割,将他们分成多个文件存放
# 使用的是归档的格式区分
logging.logback.rollingpolicy.max-file-size=10M

使用第三方日志框架

这里使用的是log4j2

首先先要将sprinBootd的默认日志框架关闭,将log4j2框架导入

<!--移除springboot的默认日志框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--添加log4j2日志框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>

log4j2配置文件【分级存储】

配置log4j2的配置信息

实现了日志的分割和归档并且按照日志级别将不同级别的日志放在不容的文件中

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30"><!--先定义所有的appender--><appenders><!--这个输出控制台的配置--><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/></console><!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--><File name="log" fileName="log/test.log" append="false"><PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/></File><!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile><!--这个存放warn信息--><RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --><DefaultRolloverStrategy max="20"/></RollingFile><!--存放error信息--><RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="100 MB"/></Policies></RollingFile></appenders><!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.springframework" level="INFO"></logger><logger name="org.mybatis" level="INFO"></logger><root level="all"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root></loggers>
</configuration>

logback配置文件【分级存储】

<configuration><!-- 控制台输出日志 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%highlight(%date{yyyy-MM-dd HH:mm:ss.SSS})] [%highlight(%level)] [%logger{50}] %msg%n</pattern></encoder></appender><!-- Info级别日志 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>D:/星球项目/UserCenter/UserCenterLog/userCenter_info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/Log/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern></encoder></appender><!-- Warn级别日志 --><appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>D:/星球项目/UserCenter/UserCenterLog/userCenter_warn.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/Log/warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern></encoder></appender><!-- Error级别日志 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>D:/星球项目/UserCenter/UserCenterLog/userCenter_error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>D:/Log/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1Kb</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>[%date{ISO8601}] [%level] [%logger{50}] %msg%n</pattern></encoder></appender><!-- 根日志器 --><root level="INFO"><appender-ref ref="CONSOLE" /><!-- 设置不同级别的日志输出器 --><appender-ref ref="INFO_FILE" level="INFO" /><appender-ref ref="WARN_FILE" level="WARN" /><appender-ref ref="ERROR_FILE" level="ERROR" /></root>
</configuration>

实例代码

配合上面的xml配置文件就会将输出的日志文件存放在指定的目录中

@RestController
@Slf4j
public class HaController {//一个类可以有一个日志记录器,他可以被@Slf4j代替//Logger logger = LoggerFactory.getLogger(getClass());@GetMapping("/haha")public String haha(){//打印日志信息log.info("/haha请求进来了");log.error("错误信息");//logger.info("/haha请求进来了");return "哈哈哈";}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据身高重建队列【贪心算法】

根据身高重建队列 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返…

公网中Linux系统下Redis使用注意事项以及被pnscan病毒攻击的经过

一次惨痛的教训&#xff1a;被pnscan病毒攻击的经过&#xff08;公网中Linux系统下Redis使用注意事项&#xff09; 0.案发情况pnscan病毒感染惨状&#xff1a;>>提示<< 1.案发原因2.排查过程简单排查之后&#xff0c;发现啥都做不了。先百度到了如下文章&#xff1…

卡尔曼滤波

第一章知识点回顾 表1变量符号对照表 1.1数学期望 数学期望表示为每次可能的结果乘上结果概率的总和。 1.1.1 数学期望的性质 假设常数为 C &#xff0c;随机变量 X 和 Y &#xff0c;则 1.2 方差&#xff08;variance&#xff09; 概率论中和统计中的方差反映单个&…

本地电脑搭建Plex私人影音云盘教程,内网穿透实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语6 总结 1.前言 用手机或者平板电脑看视频&#xff0c;已经算是生活中稀松平常的场景了&#xff0c;特…

目标检测笔记(十二):如何通过界面化操作YOLOv5完成数据集的自动标注

文章目录 一、意义二、修改源码获取三、自动标注前期准备四、开始自动标注五、可视化标注效果六、XML转换TXT 一、意义 通过界面化操作YOLOv5完成数据集的自动标注的意义在于简化数据标注的流程&#xff0c;提高标注的效率和准确性。 传统的数据集标注通常需要手动绘制边界框…

C语言每日一练-------Day(9)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;字符个数统计 多数元素 投票法 &#x1f493;博主csdn个人主页&#xf…

【Centos8_配置单节点伪分布式Spark环境】

安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接&#xff1a; jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk&#xff08;java8&#xff09; # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …

redis 应用 4: HyperLogLog

我们先思考一个常见的业务问题&#xff1a;如果你负责开发维护一个大型的网站&#xff0c;有一天老板找产品经理要网站每个网页每天的 UV 数据&#xff0c;然后让你来开发这个统计模块&#xff0c;你会如何实现&#xff1f; img 如果统计 PV 那非常好办&#xff0c;给每个网页一…

day-05 TCP半关闭 ----- DNS ----- 套接字的选项

一、优雅的断开套接字连接 之前套接字的断开都是单方面的。 &#xff08;一&#xff09;基于TCP的半关闭 Linux的close函数和windows的closesocket函数意味着完全断开连接。完全断开不仅不能发送数据&#xff0c;从而也不能接收数据。在某些情况下&#xff0c;通信双方的某一方…

『PyQt5-Qt Designer篇』| 06 Qt Designer中水平布局和垂直布局的使用

06 Qt Designer中水平布局和垂直布局的使用 1 水平布局1.1 按钮布局1.2 位置移动1.3 先布局再放按钮1.4 保存文件并调用2 垂直布局2.1 按钮布局2.2 保存并调用1 水平布局 1.1 按钮布局 拖动几个按钮: 选中这几个按钮,右键-布局-水平布局: 可以看到按钮间隔等宽水平排列: 也…

软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

软考&#xff1a;中级软件设计师:信息系统的安全属性 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准…

图床项目进度(二)——动态酷炫首页

前言&#xff1a; 前面的文章我不是说我简单copy了站友的一个登录页吗&#xff0c;我感觉还是太单调了&#xff0c;想加一个好看的背景。 但是我前端的水平哪里够啊&#xff0c;于是在网上找了找制作动态背景的插件。 效果如下图。 如何使用 这个插件是particles.js 安装…

螺线管线圈的用途是什么

螺线管线圈是一种电子元器件&#xff0c;通常用于电感器和变压器。螺线管线圈可以是单层的或多层的&#xff0c;并且可以根据特定的电气参数进行设计。它们被广泛应用于电子设备和通信系统中&#xff0c;以满足各种应用的要求。 螺线管线圈主要用于电感器和变压器。电感器是一种…

Matlab之统计一维数组直方图 bin 计数函数histcounts

一、语法 [N,edges] histcounts(X) [N,edges] histcounts(X,nbins) [N,edges] histcounts(X,edges) 解释&#xff1a; 1.1 [N,edges] histcounts(X) 将 X 的值划分为多个 bin&#xff0c;并返回每个 bin 中的计数以及 bin 边界。histcounts 函数使用自动分 bin 算法&am…

C语言入门篇(九)

前言   本篇分享的是部分操作符的概念与用法&#xff0c;从经典例题入手&#xff0c;带你快速了解和掌握。   收录专栏&#xff1a;浅谈C语言 操作符详解下 10. 逗号表达式11. 下标引用、函数调用和结构成员12. 表达式求值12.1 隐士类型转换12.2 算术转换12.3 操作符的属性…

Python教程(11)——Python中的字典dict的用法介绍

dict的用法介绍 创建字典访问字典修改字典删除字典字典的相关函数 列表虽然好&#xff0c;但是如果需要快速的数据查找&#xff0c;就必须进行需要遍历&#xff0c;也就是最坏情况需要遍历完一遍才能找到需要的那个数据&#xff0c;时间复杂度是O(n)&#xff0c;显然这个速度是…

数据是如何存储在内存中的?听我慢慢道来

数据的存储 1. 前言2. 数据类型2.1 整形家族2.2 浮点数家族2.3 构造类型&#xff08;自定义类型&#xff09;2.4 指针类型2.5 空类型&#xff08;无类型&#xff09; 3. 整数在内存中的存储4. 大小端5. 浮点数在内存中的存储 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。…

【给自己挖个坑】三维视频重建(NSR技术)-KIRI Engine

文章目录 以下是我和AI的对话通过手机拍摄物体的视频&#xff0c;再根据视频生成三维模型&#xff0c;这个可实现吗我想开发类似上面的手机应用程序&#xff0c;如何开发呢 看了以上回答&#xff0c;还是洗洗睡吧NSR技术的实现原理是什么呢有案例吗我是名Java工程师&#xff0c…

Jmeter(三十):并发测试(设置集合点)

集合点:让所有请求在不满足条件的时候处于等待状态。 如:我集合点设置为50,那么不满足50个请求的时候,这些请求都会集合在一起,处于等待状态,当达到50的时候,就一起执行。从而达到并发的效果。 那么Jmeter中可以通过同步定时器 Synchronizing Timer 来完成。 Number …

在QGIS中手动输入坐标文本添加点状矢量要素的一种方法

目录 一、前言 二、应用场景 三、实现思路 四、实验过程 1、创建一个临时矢量图层 2、给矢量图层新增要素 3、给新增要素的几何图形赋值 4、查看要素的几何图形 五、实验总结 一、前言 本文主要为QGIS点状矢量数据编辑方面的内容&#xff0c;不涉及编程方面。我们知道大…