SpringBoot—日志

news2024/9/20 20:17:46

目录

  • 日志
    • 使用日志
    • 日志级别
      • 设置日志级别
      • 设置分组
      • 指定日志文件路径
      • 日志切割归档
      • 使用第三方日志框架
        • 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.coloradmin.cn/o/948435.html

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

相关文章

Android 开发中的sdkmanager 操作说明(Delphi适用)

目录 sdkmanager 说明&#xff1a; 用法&#xff1a; 列出已安装和可用的软件包 安装软件包 更新所有已安装的软件包 接受许可 选项 sdkmanager 说明&#xff1a; sdkmanager 是一个命令行工具&#xff0c;您可以用它来查看、安装、更新和卸载 Android SDK 的软件包。如…

前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)

前言&#xff1a;基于天翼云的面相对象存储(Object-Oriented Storage&#xff0c;OOS),实现小文件的直接上传&#xff0c;大文件的分片上传。 开发文档地址&#xff1a;网址 上传之前的相关操作&#xff1a;注册账户&#xff0c;创建 AccessKeyId 和 AccessSecretKey之后&…

Private market:借助ZK实现的任意计算的trustless交易

1. 引言 Private market&#xff0c;借助zk-SNARKs和以太坊来 隐私且trustlessly selling&#xff1a; 1&#xff09;以太坊地址的私钥&#xff08;ECDSA keypair&#xff09;2&#xff09;EdDSA签名3&#xff09;Groth16 proof&#xff1a;借助递归性来匿名交易Groth16 proo…

RTK和CORS有什么区别?

高精度定位技术 关于高精度定位技术&#xff0c;RTK为业界熟知且被广泛应用&#xff0c;那么RTK到底是什么&#xff1f;仅仅是差分GPS吗&#xff1f; 其实并不尽然。 RTK RTK&#xff0c;载波相位差分技术&#xff0c;是实时处理两个测站载波相位观测量的差分方法&#xff0…

什么是OLAP

一、什么是OLAP OLAP&#xff08;On-line Analytical Processing&#xff0c;联机分析处理&#xff09;是在基于数据仓库多维模型的基础上实现的面向分析的各类操作的集合。可以比较下其与传统的OLTP&#xff08;On-line Transaction Processing&#xff0c;联机事务处理&…

分布式集群框架——Google文件系统GFS

Google文件系统GFS Google文件系统&#xff08;Google File System&#xff0c;GFS&#xff09;是一个大型的分布式文件系统。它为Google云计算提供海量存储&#xff0c;并且与Chubby、MapReduce以及Bigtable等技术结合十分紧密&#xff0c;处于所有核心技术的底层。由于GFS并不…

TDesign表单rules通过函数 实现复杂逻辑验证输入内容

Element ui 中 我们可以通过validator 绑定函数来验证一些不在表单model中的值 又或者处理一下比较复杂的判断逻辑 TDesign也有validator 但比较直观的说 没有Element那么好用 这里 我们给validator绑定了我们自己的checkAge函数 这个函数中 只有一个参数 value 而且 如果你的…

ssm计算机网络课程试卷生成器系统源码

ssm计算机网络课程试卷生成器系统源码099 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm package com.controller;import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays;…

spring cloud、gradle、父子项目、微服务框架搭建---spring secuity oauth2、mysql 授权(九)

文章目录 一、二、授权服务2.1 初始化表结构2.2 引入依赖2.3 自定义 用户详情类 UserDetailsService2.4 授权配置 AuthorizationServerConfiguration2.5 Web安全配置 WebSecurityConfiguration2.6 默认生成接口 三、资源服务3.1 引入依赖3.2 资源服务 ResourceServerConfig 四、…

2023年DAMA-CDGA/CDGP数据治理认证线上班到这里

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

探讨三维模型OBJ格式轻量化在数据存储的重要性

探讨三维模型OBJ格式轻量化在数据存储的重要性 三维模型的OBJ格式轻量化在数据存储方面具有重要性。以下是对三维模型OBJ格式轻量化在数据存储的重要性进行浅析&#xff1a; 1、节省存储空间&#xff1a;原始的三维模型文件往往非常庞大&#xff0c;占据大量的存储空间。通过进…

亚马逊产品流量来源?产品流量如何增加?

"亚马逊产品流量"通常指的是在亚马逊平台上的商品页面上产生的访问量或点击量。这是衡量产品在亚马逊上的曝光和受关注程度的重要指标之一。产品流量的多少可以影响销售和排名等方面。 亚马逊产品流量的来源可以有多种&#xff0c;包括&#xff1a; 1、有机流量&…

基于python的豆瓣电影数据分析可视化系统(包含文档+源码)

本系统采用Python技术和Django 搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发基于python的豆瓣电影数据分析可视化系统。通过调研和分析&#xff0c;系统拥有管理员和用户两个角色&#xff0c;主要具备个人中心、电影管理、用户管理、系统管理…

基于Spring Boot的高校学生党校系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校学生党校系统设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java spring…

DC电源模块在仪器设备中使用的突出表现

BOSHIDA DC电源模块在仪器设备中使用的突出表现 DC电源模块是一种广泛应用于各种电子设备中的电源设备&#xff0c;它的最显著特点就是可以将电源直接转换为直流电&#xff0c;而且可以根据需要进行稳定地输出&#xff0c;这使得它在很多领域都有着广泛的应用。 在仪器设备中…

Android Native Code开发学习(二)JNI互相传参返回调用

Android Native Code开发学习&#xff08;二&#xff09; 本教程为native code学习笔记&#xff0c;希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04&#xff0c;当然windows也是可以的&#xff0c;区别不大 一、native code介绍 native code就是在android项目中混合C或…

网银U盾插拔烦,试试USB Serve解决方案

公司网银U盾太多&#xff0c;每次办理网银业务都要不停插拔&#xff0c;效率低&#xff0c;管理难&#xff0c;怎么办&#xff1f; 交给USB Sever管理就行了&#xff01; 第一步 根据你需要的USB端口&#xff0c; 选择适合你的朝天椒USB Sever&#xff0c; 把网银U盾都插上去…

“Ahuja”补偿

自1968年Fairchild引入uA741以来&#xff0c;Miller补偿已被广泛用于集成运算放大器和相关电路的频率补偿。R.Read和J.Wieser早在1982年就提出了另一种补偿形式[1][2]。 尽管如此&#xff0c;它还是花了一段时间才被业界和学术界所接受&#xff0c;随着它在米勒补偿方面的一些…

Python数学建模1-模拟人类一生中会认识多少人的模型统计与分析

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来Python数学建模1-模拟人类一生中会认识多少人的模型统计与分析。你有没有统计过从出生到现在你接触过多少人了&#xff0c;你认识了多少人了&#xff0c;可能你只是认识&#xff0c;但是现在基本不联系了&#xff0c;可…

ZooKeeper的典型应用场景及实现

文章目录 1、典型应用场景及实现1.1、 数据发布/订阅1.1.1、配置管理案列 1.2、负载均衡1.3、命名服务1.4、分布式协调/通知1.4.1、一种通用的分布式系统机器间通信方式 1.5、集群管理1.6、Master选举1.7、分布式锁1.7.1、排他锁1.7.2、共享锁 1.8、分布式队列 2、ZooKeeper在大…