首页 > 其他分享 >SpringBoot处理日志

SpringBoot处理日志

时间:2023-05-19 18:46:55浏览次数:44  
标签:SpringBoot 处理 test path 日志 logback log

SpringBoot处理日志

工作需求

需要把不同类的日志分开存储,方便查阅。例如Controller的日志存一个文件,Service的日志存一个文件。

需求分析

  • 日志一般都用slf4j,意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。
  • 常用的日志实现一般是log4j和logback。

解决方案

  • logback是springboot默认使用日志,所以采用他比较方便。

SpringBoot通过Logback记录日志

  1. 增加配置文件,默认logback-spring.xml 放在resources根目录下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <contextName>atguiguSrb</contextName>

    <!-- 日志的输出目录 -->
    <property name="log.path" value="logs" />

    <!--控制台日志格式:彩色日志-->
    <!-- magenta:洋红 -->
    <!-- boldMagenta:粗红-->
    <!-- cyan:青色 -->
    <!-- white:白色 -->
    <!-- magenta:洋红 -->
    
    <!--控制台打印日志格式-->
    <property name="CONSOLE_LOG_PATTERN"
              value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/>
    <!--编码-->
    <property name="ENCODING"
              value="UTF-8" />
    <!--文件日志格式 记录比较详细 有时间、级别、类路径、行数、日志内容等-->
    <property name="FILE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" />
    <!--文件日志格式 记录比较简单 只有时间和日志-->
    <property name="FILE_LOG_PATTERN_SIMPLE"
              value="%date{yyyy-MM-dd HH:mm:ss} %msg%n" />



    
    <!-- 控制台日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>

    <!-- 文件日志 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/log.log</file>
        <append>true</append>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
    </appender>
    <!--滚动保存文件-->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--  要区别于其他的appender中的文件名字  -->
        <file>${log.path}/log-rolling.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>


        <!-- 设置滚动日志记录的滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--归档日志文件保留的最大数量-->
            <maxHistory>15</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--超过这个大小之前的日志归档-->
                <maxFileSize>10KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

    </appender>

    <appender name="ROLLING_FILE_CONTROLLER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--  要区别于其他的appender中的文件名字  -->
        <file>${log.path}/controller-log.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN_SIMPLE}</pattern>
            <charset>${ENCODING}</charset>
        </encoder>
        <!-- 设置滚动日志记录的滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/%d{yyyy-MM-dd}/controller/controller-log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--归档日志文件保留的最大数量-->
            <maxHistory>15</maxHistory>

            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>20MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!-- 开发环境和测试环境 dev是application-dev.yml的前缀 通过这个区分日志记录 -->
    <springProfile name="dev,test">
        <!--name为记录日志的包名 level为日志级别-->
        <!--可以配置多个logger 给不同的包配置不同的 appender -->
        <!--保存controller文件下所有文件 all级别的日志,按照 ROLLING_FILE_CONTROLLER 规则保存-->
        <logger name="work.hujj.log.controller" level="all">
            <appender-ref ref="ROLLING_FILE_CONTROLLER" />
        </logger>
    </springProfile>

    <!-- 生产环境 不同的环境 可以配置不同的logger -->
    <springProfile name="prod">
        <logger name="com.atguigu" level="ERROR">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="FILE" />
        </logger>
    </springProfile>
</configuration>

2.在需要的地方输出log,加@Slf4j注解,就可以直接使用log.info(),log.error()等方法记录日志。

@RestController
@RequestMapping("log")
@Slf4j
public class LogController {
    @GetMapping("test")
    public String test() {
        log.info("log-test");
        return "success";
    }
}

3.附上maven依赖

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

标签:SpringBoot,处理,test,path,日志,logback,log
From: https://www.cnblogs.com/super-hu/p/17416014.html

相关文章

  • MySQL 处理重复数据
    MySQL处理重复数据有些MySQL数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。防止表中出现重复数据你可以在MySQL数据表中设置指定的......
  • NumPy_数据处理详解—矩阵运算
    示例根据出版的图书进行代码桥写代码示例#!/usr/bin/python3#-*-coding:utf-8-*-importpandasaspdimportnumpyasnpimportopen3daso3ddefget_from_eye(rotation,trans):##单位矩阵-对角线元素为1,非对角线元素全为0的矩的正方矩阵np.identity......
  • springboot~国际化Locale正确的姿势
    Java中的Locale.getDefault()获取的是操作系统的默认区域设置,如果需要获取客户端浏览器的区域设置,可以从HTTP头中获取"Accept-Language"的值来进行解析。使用说明Java网站中实现国际化(多语言支持)通常需要涉及以下几个方面:为所有可见的文本(如按钮、标签、提示等)都提供多语言......
  • 关于SpringBoot AutoConfiguration
    (1)如何导入的自动配置类首先我们得从@SpringBootApplication注解入手。@SpringBootApplicationpublicclassSpringBootDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootDemoApplication.class,args);......
  • VTK 9.2 Qt 5.14 安装及错误处理
    参考VTK9.1.0在Windows10+VS2019+Qt5.15.2环境下编译安装以及VTK应用于QT_vtk-qt安装包_isongxw的博客-CSDN博客安装注意:编译release和debug,通过切换配置为release和debug,文件都是在cmake的CMAKE_INSTALL_PREFIX指定的文件夹,需要编译完一种后,把这个文件夹改名(比如debug配置,则改......
  • 多态、虚函数表、底层实现、多重继承的问题及处理
    本文代码摘自 http://dwz.date/PST;视频解析:十分钟带你搞明白虚函数、虚表、多态的原理以及多重继承带来的问题_哔哩哔哩_bilibili1、多态:基类指针只能调用基类的成员函数,不能调用派生类的成员函数;如果在基类的成员函数前加上virtual关键字,把它声明为虚函数;基类指针就可以......
  • springboot开启跨域security也开启跨域配置
    springboot开启跨域security也开启跨域配置浏览器同源策略,导致跨域失败,添加了security框架后,因为安全框架有一些列的过滤器,即使springboot把跨域打开,security的过滤器也可以能拦截。所以,如果要在服务器端设置,要改两处 方法一:先开放springboot的跨域 再开启security的跨......
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息
    SpringBoot实现WebSocket发送接收消息+Vue实现SocketJs接收发送消息参考:1、https://www.mchweb.net/index.php/dev/887.html2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2......
  • springboot 2.4 版本后的多环境配置
    beanpackagecom.example.demo.tt;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjavax.annotation.PostConstruct;@ComponentpublicclassTT{@Value("${test.ww}")pub......
  • python批量处理excel数据、批量透视、合并透视表
    ###t+21importpandasaspdimportos#半自动———#——<创建好格式文件夹#——<数据下载至文件夹#——<修改date#——<运行##直播时间date='4.21'#读取存放文件路径read_path='E:/test/t+21/'+date+'/1原始数据'path_list=os.listdir(read_path)pathdir=''writ......