首页 > 其他分享 >第21章 SpringBoot日志

第21章 SpringBoot日志

时间:2024-11-06 09:19:03浏览次数:5  
标签:INFO SpringBoot logging log org 日志 com 21

我们首先介绍一下开源日志框架。

首先是commons-logging,是apache最早提供的日志框架。它的主要作用提供一个统一的日志接口,以便可以在不同的项目中使用不同的日志框架。common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志实现库(例如,jdk自带的logging库)。

接下来是slf4j,它与commons-logging非常的相似,也是对不同日志框架提供一个统一的日志接口,可以在部署的时候不修改任何配置即可接入一种日志实现库。slf4j与具体的日志实现框架,如log4j、logback等。

备注:commons-logging和slf4j是java中的日志接口,具体的实现可以由开发人员自由选择。log4j和logback则是具体的日志实现方案。

log4j是经典的一种日志解决方案,它允许开发者通过配置文件灵活地控制日志的输出目标、记录级别、输出格式等。logback也是一种日志实现,它是log4j的创始人开发的一个新的日志框架。它实现了slf4j的接口,因此可以作为slf4j的一个具体实现。

最后介绍一下log4j2,它是 log4j 和 logback 的改进版。在 Log4j2 中,分为 API(log4j-api)和实现 (log4j-core) 两个模块。在性能方面,log4j2采用的异步日志记录机制,能够在不阻塞主线程的情况下进行日志记录,从而大大提高了日志处理的效率。

默认情况下,Spring Boot 默认使用 slf4j + logback 进行日志记录,并将INFO级别输出到控制台,但不会写到日志文件。接下来,我们创建一个 “SpringBootLogbackDemo” 工程。

然后我们修改编码格式以及Maven仓库地址,我们省略这个过程了。

接下来,我们修改 “pom.xml” 文件,添加SpringBoot和Web依赖,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>SpringBootLogbackDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.18</version>
            </plugin>
        </plugins>
    </build>
    
</project>

接下来,我们创建 Appliaction 入口类文件

package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}

接下来,我们就可以启动测试一下,直接查看控制台的日志

我们随便查看一条日志信息

2024-10-31 11:19:31.313  INFO 6480 --- [main] com.demo.Application: Started Application in 7.246 seconds (JVM running for 9.088)

日志输出内容元素具体如下:

时间日期:	2024-10-31 11:19:31.313
日志级别:	INFO
进程ID:		 6480
分隔符:		 ---
线程名:		 main
Logger名:	 com.demo.Application (类名)
日志内容:	Started Application in 7.246 seconds (JVM running for 9.088)

这里说明一下日志级别,日志级别从低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL

trace:追踪日志,输出程序执行的轨迹,一般不使用。
debug:调试日志,调试情况下使用。
info: 信息日志,默认输出级别。
warn: 警告日志,潜在的错误信息,用于提示开发人员是否需要处理。
error:错误日志,无法正常完成目标操作,需要开发人员处理。
fatal:致命错误日志,可能会导致应用程序的退出,需要开发人员处理。

在开发环境中,我们使用最多的是“info”和“debug”日志信息,在测试和生产环境中,我们则使用 “warn” 和 “error” 日志信息。如果有些问题无法在开发环境中解决的话,可以在测试和生产环境中使用“info”日志辅助我们寻找问题。接下来,我们创建一个 TestController 控制器来使用 logback 记录日志

package com.demo.controller;

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

import java.util.Map;

@Controller
public class TestController {

    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @GetMapping("/test")
    public String test(Map map){

        log.info("记录一下日志");

        map.put("message", "hello, world!");
        return "test";
    }
    
}

接下来,我们创建 “resources\static\index.html” 入口文件

<!doctype html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>index</title>
</head>
<body>

<a href="/test">/test</a>

</body>
</html>

接着,我们继续需要创建 “resources\templates\test.html” 文件

<!doctype html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>test</title>
</head>
<body>

<p th:text="${message}"></p>

</body>
</html>

接下来,我们重启测试一下

接下来,我们查看一下控制台

默认情况下,Spring Boot 的 root 日志级别设置为 INFO。你可以在 src/main/resources/application.properties 中为 root 或任何指定的包配置日志级别,如下所示:

logging.level.root=WARN
logging.level.com.demo=WARN

上面的配置中,我们还定义了 com.demo 包下日志以 WARN 级别输出。

由于 WARN 级别高于 INFO 级别,除了Spring的Info日志,我们之前的日志也就不会输出了。

如果想要将日志输出到文件中,可通过如下两个配置:

logging.level.root=INFO
logging.level.com.demo=INFO
logging.file.name = E:/idea-workspace/SpringBootLogbackDemo/test.log

我们将日志文件存储到当前工程根目录下,并且修改了日志级别为INFO级别,以便有信息存储到文件中。

使用 logging.* 方式不能对日志做出更加详细的配置,我们可以创建专门的日志配置文件,也就是 src/main/resources/logback.xml 文件。不过,Spring Boot 提供了一些 logback 扩展,可帮助你使用高级配置选项。为了使用这些扩展,需要创建名为 logback-spring.xml 而非 logback.xml 的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 定义日志文件名称 -->
    <property name="log.name" value="Demo" />
    <!-- 定义日志输出路径 -->
    <property name="log.path" value="E:/idea-workspace/SpringBootLogbackDemo" />
    <!-- 定义日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 定义控制台输出策略 Console -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 直接使用我们上面定义的“日志输出格式” -->
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 定义文件输出策略 RollingFile -->
    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件保存路径和名称 -->
        <file>${log.path}/${log.name}.log</file>
        <!-- 直接使用我们上面定义的“日志输出格式” -->
        <encoder>
            <pattern>${log.pattern}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 定义文件滚动策略:按照时间和大小进行滚动 -->
        <!-- 随着应用程序运行时间越来越长,日志也会增长的越来越大,我们需要切分日志文件。-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 按照日期和切分重新定义日志文件 -->
            <fileNamePattern>${log.path}/${log.name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 单个日志文件的大小 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 控制日志文件总大小 -->
            <totalSizeCap>10GB</totalSizeCap>
            <!-- 只保留最近90天的日志 -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- SpringBoot的Root日志级别为INFO级别 -->
    <root level="info">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>

    <!-- 定义"com.demo"包下日志级别为INFO级别 -->
    <logger name="com.demo" level="info" additivity="false">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </logger>

</configuration>

上面的配置中已经给出了很多注释,就不再详细介绍了,我们主要介绍一下日志格式

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} --- [%method,%line] --- %msg%n
%d{yyyy-MM-dd HH:mm:ss.SSS}:日期和时间的格式化模式。

[%thread]:表示当前线程的名称。

%-5level:表示日志级别,-5表示日志级别的最小宽度为5个字符,如果日志级别不足5个字符,则左对齐并用空格填充。

%logger{50}:表示日志记录器的名称(类名)。{36}:表示日志记录器名称的最大长度为36个字符,如果名称超过36个字符,则截断。

[%method,%line]:表示方法名和行号。

%msg:表示日志消息的内容。

%n:表示换行符,用于在每条日志消息后换行。

最后我们注释掉 “application.properties” 中的配置信息

#logging.level.root=INFO
#logging.level.com.demo=INFO
#logging.file.name = E:/idea-workspace/SpringBootLogbackDemo/test.log

我们重新运行测试一下

对于日志文件的切分,我们可以将其配置调整小一些,进行测试。

<!-- 单个日志文件的大小 -->
<maxFileSize>2KB</maxFileSize>

如何将SQL语句输入到控制台和文件中,配置文件 “application.properties” 修改如下

# 打印SQL到控制台和文件日志中
logging.level.com.demo.mapper = DEBUG
logging.level.com.baomidou.mybatisplus = DEBUG
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.configuration.log-impl = org.apache.ibatis.logging.slf4j.Slf4jImpl
#mybatis-plus.configuration.log-impl = org.apache.ibatis.logging.stdout.StdOutImpl

备注:包路径com.demo.mapper是我们自己创建的Mapper接口路径。

本工程完整代码下载: https://download.csdn.net/download/richieandndsc/89953263

标签:INFO,SpringBoot,logging,log,org,日志,com,21
From: https://blog.csdn.net/richieandndsc/article/details/143558025

相关文章

  • springboot关爱老人App-计算机毕业设计源码32708
    目 录摘要1绪论1.1开发背景和意义1.2开发技术1.2.1Android开发工具1.2.2Springboot框架1.2.3MySQL数据库1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1用户注册流程2.2.2用户登录流程2.2.3数据删除流程2.3系......
  • springboot高校医务室管理系统-计算机设计毕业源码58407
    目 录摘 要1绪论1.1研究背景与意义1.2国内外研究现状1.3论文结构与章节安排1.4相关技术、工具简介2 高校医务室管理系统项目概述2.1可行性分析2.1.1技术可行性2.1.2 经济可行性2.1.3操作可行性2.2 系统功能分析2.2.1功能性分析2.2.2......
  • springboot整合redis详细教程
     前言什么是redis? Redis是一个开源的高性能键值存储系统,通常用作数据库、缓存或消息代理。以下是对Redis的详细介绍:1.基本特性速度快:Redis的读写速度非常快,可以达到每秒数万次的读写操作。多种数据结构:支持字符串、列表、集合、有序集合、散列、位图、超日志和地理......
  • 【2024潇湘夜雨】WIN11_Pro-Workstation_24H2.26120.2213软件选装纯净特别版11.5
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro-Workstation_24H2.26120.2213.进桌面后稍等片刻,等待后续部分优化完成。2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也不......
  • 初学Java基础---Day21---正则表达式,日期类,Math类,Random类,System类,Runtime类,大数值运
    一,正则表达式理解:        符合某个语句规范的字符串案例://案例:把一个字符串中带电话号码替换成130****1111的形式Stringstr="小红13012341111小绿15112342222小黑13912343333";//分析:电话号码可以分为三组如:(130)(1234)(1111)其中第一组中的1是固定/......
  • java计算机毕业设计基于Springboot的助学金管理系统设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在教育领域,助学金管理是高校及各类教育机构的重要工作内容。随着学生数量的不断增加以及助学金种类和发放规则的日益复杂,传统的助学金管理方式面......
  • java计算机毕业设计基于Springboot的大学宿舍管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容基于Springboot的大学宿舍管理系统的相关研究说明一、研究背景随着大学教育的不断发展,高校招生规模持续扩大,大学宿舍的管理面临着日益复杂的局面。传统的宿......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现一
    一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,竞争激烈,人们面临着来......