RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)

本文介绍了RuoYi-Vue-Plus项目中的日志配置,包括logback的依赖和yml配置,重点讲解了logback-plus.xml的详细设置,以及如何使用p6spy进行SQL性能分析。通过p6spy的开关配置和spy.properties文件解析,展示了如何监控和优化SQL执行效率。
摘要由CSDN通过智能技术生成

项目后本地日志

 一、logback依赖

打开最外层的 pom.xml,查看 SpringBoot的依赖配置。

   <dependencyManagement>
        <dependencies>

            <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
springboot已经内置 logback日志依赖:

<artifactId>spring-boot-dependencies</artifactId>  ctrl + 点击进入,
     <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-access</artifactId>
        <version>${logback.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
      </dependency>

 二、yml配置

配置路径: ruoyi-admin/src/main/resources/application.yml 

# 日志配置
logging:
  level:
    com.ruoyi: @logging.level@
    org.springframework: warn
  config: classpath:logback-plus.xml

上面配置,

  • config 配置文件:logback-plus.xml ,logback的配置文件(资源已经上传logback-plus.xml)
  • 日志级别level: com.ruoyi: @logging.level@ 对应pom文件中,profiles里面的日志级别,如下:
 <profile>
            <id>dev</id>
            <properties>

                <profiles.active>dev</profiles.active>
                <logging.level>info</logging.level>
            </properties>
            <!--默认环境-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

 日志样式展示:

 使用示例:

package com.ruoyi.demo.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import com.ruoyi.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <简述>
 * <详细描述>
 *
 * @author syf
 * @date 2024年05月14日 14:27
 */
@SaIgnore
@Slf4j
@RestController
public class LogBackController {

    /**
     * <简述>  org.slf4j.Logger.LoggerFactory 调用
     * <详细描述>
     * @author syf
     * @date 2024/5/14 14:34
     * @param null
     * @return null
     */

    Logger logger = LoggerFactory.getLogger(LogBackController.class);

     @GetMapping("log1")
    public R<Void> log1(){
         logger.debug("debug");
         logger.info("info");
         return R.ok();
     }

     /**
      * <简述>
      * <详细描述>  @Slf4j 注解
      *             调用  log.debug("debug");
      * @author syf
      * @date 2024/5/14 14:34
      * @return com.ruoyi.common.core.domain.R<java.lang.Void>
      */
     @GetMapping("log2")
    public R<Void> log2(){
        log.debug("debug");
        log.info("info");
        return R.ok();
    }
}

三、logback-plus.xml(已经上传资源中,自行下载 )

文件路径: ruoyi-admin/src/main/resources,目录下如截图:

配置属性解析: 

1-property :定义变量(定义输入时间格式,样式等,appender 可以引用)
2-appender : 定义日志输出(名称 路径 级别 等等,具体使用如下注解:)

  3-async_error 中定义异步写入策略,file_error 定义编码规则,保存时间,日志级别等等

具体文件如注释:

 <!--1-RollingFileAppender 滚动文件附加器-->
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 30天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!--2-编码器 输出格式-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!--3-阈值过滤器-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    
    <!-- error异步输出 -->
    <appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="file_error"/>
    </appender>

  3- root 引用上面appender 如图:

 

四、p6spy SQL性能分析器使用

p6spy :sql 性能分析插件

如下:打印耗时,以及原来sql

 - 加载参数缓存数据成功
 Consume Time:15 ms 2024-05-14 16:24:27
 Execute SQL:SELECT dict_code,dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,remark,create_by,create_time,update_by,update_time FROM sys_dict_data WHERE (status = '0')

1-依赖:
<!-- sql性能分析插件 -->
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>${p6spy.version}</version>
</dependency>

2-yml中开关: 

p6spy: true 开发环境开启

生产环境关闭

--- # 数据源配置
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
    dynamic:
      # 性能分析插件(有性能损耗 不建议生产环境使用)
      p6spy: true
      # 设置默认的数据源或者数据源组,默认值即为 master
。。。。。。。。。。。。。。。省略

3- 配置文件 ruoyi-admin/src/main/resources/spy.properties 

# p6spy 性能分析插件配置文件
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
#deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# SQL语句打印时间格式
databaseDialectTimestampFormat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
# 是否过滤 Log
filter=true
# 过滤 Log 时所排除的 sql 关键字,以逗号分隔
exclude=SELECT 1

五、 spy.properties 解析

1-P6SpyLogger:定义了打印格式

路径: com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger

实现MessageFormattingStrategy ,可以实现以下多种打印格式

public class P6SpyLogger implements MessageFormattingStrategy {
    public P6SpyLogger() {
    }

    public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) {
        return StringUtils.isNotBlank(sql) ? " Consume Time:" + elapsed + " ms " + now + "\n Execute SQL:" + sql.replaceAll("[\\s]+", " ") + "\n" : "";
    }
}

2-appender 输出位置

实现 P6Logger 接口,可以定义输出到 控制台、文件、日志

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syfjava

请博主喝杯蜜雪冰城

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值