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 "哈哈哈";
    }
}

在这里插入图片描述

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

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

相关文章

高速公路自动驾驶汽车超车控制方法研究

目录 摘要 ............................................................................................................ I Abstract ...................................................................................................... II 目录 ...............…

Ansible-palybook学习

目录 一.playbook介绍二.playbook格式1.书写格式2.notify介绍 一.playbook介绍 playbook 是 ansible 用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。通过 playbook 的详细描述&#xff0c;执行其中的一系列 tasks &#xff0c;可以让远端主机达到预期的状态。pl…

electron软件安装时,默认选择为全部用户安装

后续可能会用electron开发一些工具&#xff0c;包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度&#xff0c;取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序&#xff0c;真的发布工具了&…

java八股文面试[多线程]——synchronized锁升级过程

速记&#xff1a;偏向-轻量-重量 锁膨胀 上面讲到锁有四种状态&#xff0c;并且会因实际情况进行膨胀升级&#xff0c;其膨胀方向是&#xff1a;无锁——>偏向锁——>轻量级锁——>重量级锁&#xff0c;并且膨胀方向不可逆 一.锁升级理论. 在synchronized锁升级过程…

Qt应用开发(基础篇)——进度条 QProgressBar

一、前言 QProgressBar类继承于QWidget&#xff0c;是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度&#xff0c;比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念&#xff0c;让用户知道程序还在正常的执行中。 …

web功能测试方法大全—完整!全面!(纯干货,建议收藏哦~)

本文通过六个部分为大家梳理了web功能测试过程中&#xff0c;容易出现的遗漏的部分&#xff0c;用以发掘自己工作中的疏漏。&#xff08;纯干货&#xff0c;建议收藏哦~&#xff09; 一、输入框 1、字符型输入框 2、数值型输入框 3、日期型输入框 4、信息重复 在一些需要命名…

做一个蛋糕店小程序需要哪些步骤?

对于一些不懂技术的新手来说&#xff0c;创建蛋糕店小程序可能会感到有些困惑。但是&#xff0c;有了乔拓云平台的帮助&#xff0c;你可以轻松地创建自己的蛋糕店小程序。下面&#xff0c;我将为大家详细介绍一下具体的操作步骤。 首先&#xff0c;登录乔拓云平台并进入后台管理…

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件&#xff0c;生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示&#xff1a; 录制脚本&#xff0c;只是一个过渡&#xff0c;从0到1的一个过渡&#xff0c;如果让你直接写脚本&#xf…

保护隐私的第一步:从更新浏览器开始

当今社会已经进入了数字化和网络化的时代&#xff0c;而网络安全问题也日益突显。随着互联网在我们生活中的不断渗透&#xff0c;网络威胁变得愈发普遍和隐蔽。在这样的背景下&#xff0c;网络浏览器作为人们访问互联网的主要工具之一&#xff0c;不仅为我们提供了便捷的上网方…

HTML基础--Form表单--内联元素

目录 Form表单 表单元素 创建表单 () 文本输入 () 密码输入 单选按钮 () 和 复选框 () 下拉列表 () 和 选项 ()提交按钮 () 重置按钮 () 块元素与行内元素&#xff08;内联元素&#xff09; Form表单 HTML中的表单&#xff08;<form>&#xff09;是一个重要的元…

基于流计算 Oceanus(Flink) CDC 做好数据集成场景

由于第一次做实时&#xff0c;所以踩坑比较多&#xff0c;见谅(测试环境用的flink),小公司没有用到hadoop组件 一、踩坑记录 1:本地代码的flink版本是flink1.15.4&#xff0c;生产环境是flink1.16.1&#xff0c;在使用侧输出流时报错&#xff0c;需要使用以下写法,需要使用Si…

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

Revit SDK:Selections 选择

前言 Revit 作为一款成熟的商业软件&#xff0c;它将自己的UI选择功能也通过 API 暴露出来。通过 API 可以按照特定的过滤规则来选择相应的元素&#xff0c;能力和UI基本上是等价的。这个 SDK 用四个例子展示了 API 的能力&#xff0c;内容如下。 内容 PickforDeletion 核心…

【Docker】网络

文章目录 Docker 网络基础Docker网络管理Docker网络架构CNMLibnetwork驱动 常见的网络类型 Docker 网络管理命令docker network createdocker network inspectdocker network connectdocker network disconnectdocker network prunedocker network rmdocker network ls docker …

Linux —— keepalived

简介 Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。 Keepalived 开源并且免费的软件。 Keepalived 的2大核心功能 1. loadbalance 负载均衡 LB&#xff1a;ipvs--》lvs软件…

zookeeper 3.8.1安装和入门使用

1、zookeeper环境搭建&#xff08;Windows单机版&#xff09; 1.1、 前提 必须安装jdk 1.8&#xff0c;配置jdk环境变量&#xff0c;步骤略 1.2、安装zookeeper 地址&#xff1a;https://zookeeper.apache.org/ 1.2.1、选择releases版本 1.2.2、下载安装包并解压 1.2.3、配…

联想电脑装系统无法按F9后无法从系统盘启动的解决方案

开机时按F9发现没有加载系统盘. 打开BIOS设置界面&#xff0c;调整设置如下: BOOT MODE: Legacy Support.允许legacy方式boot. BOOT PRIORITY: Legacy First. Legacy方式作为首选的boot方式. USB BOOT: ENABLED. 允许以usb方式boot. Legacy: 这里设置legacy boot的优先级,…

进程Start

Linux中的命令解释器和Windows的程序管理器explorer.exe一样地位,都是在用户态下运行的进程 共享变量发生不同进程间的指令交错&#xff0c;就可能会数据出错 进程只作为除CPU之外系统资源的分配单位 CPU的分配单位是线程 每个进程都有自己的独立用户空间 内核空间是OS内核的…

Qt day2

目录 1.多态&#xff0c;虚函数&#xff0c;纯虚函数 1.多态性&#xff08;Polymorphism&#xff09;&#xff1a; 2.虚函数&#xff08;Virtual Function&#xff09;&#xff1a; 3.纯虚函数&#xff08;Pure Virtual Function&#xff09;&#xff1a; 将引用作为函数参…

智能感测棒形静电消除器所具备的特点

智能感测棒形静电消除器是一种具有联网监控功能的设备。它可以通过内置的传感器实时感知周围的静电情况&#xff0c;并采取相应的措施进行消除。 该设备通过联网功能&#xff0c;可以将感测到的静电信息传输到指定的监控平台或手机应用程序中进行实时监控与管理。用户可以随时…