【ruoyi-vue】关于slf4j日志使用

系列文章目录

【ruoyi-vue】 关于slf4j日志使用

文章目录

  • 系列文章目录
  • 一、slf4j概述
  • 二、使用slf4j
    • 1.代码方式使用Slf4j
    • 2.lombok使用注解引入@Slf4j
    • 3.对关键模块单独记录日志文件
  • 三、配置slf4j
    • 1.项目配置
    • 2.改造
    • 3. 日志级别及优先级
  • 四、logback.xml配置文件解析
    • 1.定义日志文件的存储地址
    • 2.定义日志格式

一、slf4j概述

SLF4J(Simple Logging Facade for Java)是一个简单的日志门面,允许使用者在应用程序中使用不同的日志实现(例如Logback、Log4j、java.util.logging等)而不需要改变应用程序的代码。SLF4J不是一个具体的日志实现,而是一个抽象的日志接口,它提供了一组用于日志记录的方法,使得开发者可以在应用程序中编写日志记录代码,而无需关心具体的日志实现。

SLF4J的主要优势包括:

  • 简单性:SLF4J的API设计简单易用,容易理解和使用。
  • 灵活性:SLF4J允许开发者在不同的日志实现之间切换,而不需要修改应用程序的代码。
  • 性能:SLF4J的设计追求高性能,同时支持延迟加载和参数化日志记录,可以提高应用程序的性能。
  • 广泛支持:SLF4J被广泛应用于Java生态系统中的各种项目和框架中,是Java应用程序中最常用的日志门面之一。

总的来说,SLF4J是一个简单、灵活、高性能的日志门面,可以帮助开发者在Java应用程序中方便地进行日志记录,并且能够轻松地切换不同的日志实现。

二、使用slf4j

1.代码方式使用Slf4j

SpringBoot框架内部已经集成slf4j,因此并不需要引入其他依赖,使用时需要在类中使用LoggerFactory.getLogger(类名.class)可以获取到logger对象

 private static final Logger logger = LoggerFactory.getLogger(DemoController.class);public void test(){logger.info("输出日志");}

2.lombok使用注解引入@Slf4j

使用lombok只需要引入依赖后在类上加@Slf4j注解即可直接使用

在ruoyi-common模块的pox.xml中添加

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
//topic = "xz-mqtt"  指定日志附加器的名字,需要在logback.xml定义,默认 @Slf4j 即可
@Slf4j(topic = "xz-mqtt")
@RestController
@RequestMapping("/demo/test")
public class DemoController {public void test(){logger.info("输出日志");}
}

3.对关键模块单独记录日志文件

根据 logback.xml 的配置使用下面的注解和 私有的Logger变量 即可实现对指定模块的单独记录

@Slf4j(topic = "xz-mqtt")

 private Logger loggerMqtt = LoggerFactory.getLogger("xz-mqtt");

三、配置slf4j

1.项目配置

application.yml

# 日志配置
logging:level:com.ruoyi: debug   org.springframework: warn

logging.level:配置指定包的路径下应用程序的日志记录和日志级别。

ruoyi-vue 默认配置文件 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 日志存放路径 --><property name="log.path" value="/home/ruoyi/logs" /><!--  <property name="log.path" value="D:\home" />--><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><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><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 用户访问日志输出  --><appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-user.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天回滚 daily --><fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制  --><logger name="com.ruoyi" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /></root><!--系统用户操作日志--><logger name="sys-user" level="info"><appender-ref ref="sys-user"/></logger>
</configuration> 

2.改造

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 日志存放路径 -->
<!--	<property name="log.path" value="/home/ruoyi/logs" />--><property name="log.path" value="D:\home" /><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 高亮日志格式  --><property name="HIGHLIGHT_PATTERN" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--			<pattern>${log.pattern}</pattern>--><pattern>${HIGHLIGHT_PATTERN}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><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><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 用户访问日志输出  --><appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-user.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天回滚 daily --><fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 用户访问日志输出  --><appender name="xz-mqtt" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false --><prudent>false</prudent><!-- 日志日常打印日志文件,生成日志示例:${log.path}/xz-mqt.log 生成到项目中,如果指定 D:/log 则生成到 D盘下log文件夹中--><file>${log.path}/xz-mqt.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天回滚 daily 即每天都会重新创建新的日志文件--><fileNamePattern>${log.path}/xz-mqt.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 ,60天之前的会被清理掉--><maxHistory>60</maxHistory></rollingPolicy><encoder><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度  %logger{20}: 表示Logger名称,最多占据20个字符的空间  %method: 表示调用日志输出方法的名称 %L: 表示行号       %msg:日志消息,%n是换行符--><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制  --><logger name="com.ruoyi" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /></root><!--系统用户操作日志--><logger name="sys-user" level="info"><appender-ref ref="sys-user"/></logger><!--mqtt操作日志--><logger name="xz-mqtt" level="trace"><appender-ref ref="xz-mqtt"/></logger>
</configuration>

3. 日志级别及优先级

  • trace(跟踪):一般用来追踪详细的程序运行流,比如程序的运行过程中,运行到了哪一个方法,进入了哪一条分支。通过trace程序的运行流程,可以判断程序是否按照期望的逻辑在运行

  • debug(调试):这类日志往往用在判断是否有出现bug的场景,且往往记录了代码运行的详细信息,比如方法调用传入的参数信息

  • info(消息):用来记录程序运行的一些关键信息,它不像trace那样记录程序运行的整个流程,也不像debug那样为了解决问题而记录详细的信息。info记录的是整个系统的运行信息,比如系统运行到了哪一个阶段,到达了哪一个状态

  • warn(警告):用来记录一些警告信息。警告信息表示,程序进入了一个特殊的状态,在该状态下程序可以继续运行,但是不建议让程序进入该状态,因为该状态可能导致结果出现问题

  • error(错误):用来记录运行时的错误信息,表示程序运行过程中出现了需要被解决的问题,往往是一些异常。使用error日志的时候,一般会将详细的异常出现的原因记录

    日志优先级从高到低依次为trace、debug、info、warn、error。相对而言,打印的日志会越来越少。

四、logback.xml配置文件解析

1.定义日志文件的存储地址

    <property name="log.path" value="D:\home" />
项目Value作用
log.pathlog.path定义日志文件存放的路径

2.定义日志格式

    <!-- 日志输出格式 --><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 高亮日志格式  --><property name="HIGHLIGHT_PATTERN" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50})- [%method,%line] - %highlight(%msg) %n"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder  class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--			<pattern>${log.pattern}</pattern>--><pattern>${HIGHLIGHT_PATTERN}</pattern></encoder></appender>
  • %d{yyyy-MM-dd HH:mm:ss.SSS} : 表示日期和时间,格式为年-月-日 时:分:秒.毫秒
  • %thread]: 表示线程名
  • %-5level: 表示日志级别,左对齐,最少占据5个字符的空间
  • %logger{20}: 表示Logger名称,最多占据20个字符的空间( 即 LoggerFactory.getLogger(“xz-mqtt”); 或者 LoggerFactory.getLogger(IndexController.class);
  • %method: 表示调用日志输出方法的名称
  • %L: 表示行号
  • %msg:表示日志消息
  • %n: 表示换行符
//javalogger.warn("---warn ---警告--- ");logger.error("---err---错误---");
//控制台
2024-04-25 14:19:00.688 [http-nio-9099-exec-1] WARN  xz-mqtt - [listFiles,17] - ---warn ---警告--- 
2024-04-25 14:19:00.688 [http-nio-9099-exec-1] ERROR xz-mqtt - [listFiles,18] - ---err---错误---

在这里插入图片描述

其中 %red(xxxxxxx) %green(xxxx) %highlight() 这些颜色可以自定义修改
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱普生RX8111CE工厂流水线控制模块实现超长待机

经过多年的高速发展&#xff0c;我国已基本实现工业机械化&#xff0c;但距离工业自动化还有很大差距。随着机器人、工业自动化趋势愈演愈烈&#xff0c;未来发展前景日趋明朗。工厂流水线的要求也日益增加&#xff0c;其中包括对计件、计时等定量的要求&#xff0c;还有对设备…

on duplicate key update的使用

目录 实体类 控制层 服务层 数据层 在开发中经常会遇到操作数据库时若库中存在则更新&#xff0c;不存在则插入的需求。若是一条一条的查询判断那不得累死啊&#xff01;在mysql中有 on duplicate key update的语句支持! 实体类 注意此user表中主键为uid&#xff0c;所以…

追剧新宠:短剧小程序,随时随地看大片

在繁忙的现代生活中&#xff0c;人们越来越追求高效、便捷的娱乐方式。短剧小程序凭借其短小精悍、内容丰富的特点&#xff0c;成为了追剧新宠&#xff0c;让人们随时随地都能沉浸在精彩的故事中。 一、短剧小程序的魅力 随时随地的观影体验&#xff1a;短剧小程序无需下载&…

DPDK 相关

DPDK API GUIDES: DPDK API AND GUIDEShttps://core.dpdk.org/doc/archives/ 18.11: API:https://doc.dpdk.org/api-18.11/ GUIDES:DPDK documentation — Data Plane Development Kit 18.11.11 documentation 19.11 API:DPDK: API GUIDES:DPDK documentation — Data Plane D…

扭蛋机小程序体验:线上扭蛋的无限魅力

随着科技的发展和互联网的普及&#xff0c;传统娱乐方式正逐渐与线上平台相结合&#xff0c;为用户带来全新的体验。扭蛋机小程序&#xff0c;作为这一趋势下的产物&#xff0c;凭借其独特的玩法和无限的魅力&#xff0c;正逐渐成为线上娱乐的新宠。 一、线上扭蛋机小程序的魅力…

家用洗地机怎么选?哪些家用洗地机性价比高?

随着科技的不断发展&#xff0c;智能家居产品逐渐走入我们的生活。其中&#xff0c;洗地机作为一款能够减轻家庭清洁负担的利器&#xff0c;受到了很多消费者的关注。那么&#xff0c;家用洗地机怎么选&#xff1f;本文将为大家详细介绍哪些家用洗地机性价比高。 家用洗地机怎…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后&#xff0c;一个在实际编程开发过程中非常重要的问题是第三方库添加&#xff0c;然而Python默认的源网络速度有点慢&#xff0c;因此&#xff0c;我们常常需要做的是更换Pycharm的安装源。 在当前最新版&#xff08;2022.03版&…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面&#xff0c;使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路&#xff1a;修改Grafana配…

JAVA系列 小白入门参考资料 类和对象(1)

目录 1. 什么是面向对象 2. 面向对象与面向过程 面向过程 面向对象 3. 类定义和使用 类的定义格式 4. 类的实例化 5. 类和对象的说明 1. 什么是面向对象 Java是一门纯面向对象的语言 (Object Oriented Program &#xff0c;简称 OOP) &#xff0c;在面向对象的世界里…

Odoo17开发环境搭建

1.先下载godoo17_20240227_02.zip压缩包&#xff0c;里面包含了项目用到的所有的插件了&#xff0c;直接使用这个包即可。 下载地址&#xff1a;https://download.csdn.net/download/java173842219/89242257 2.解压该压缩包&#xff0c;目录如下&#xff1a; 3.下载pycharm并…

前端实现将当前页面内容下载成图片(图片可做到高清画质)

插件背景&#xff1a; html2canvas可以把你想要转变的元素变为图片&#xff0c;使用file-saver下载图片。 1、安装html2canvas、file-saver npm install html2canvasnpm install file-saver --save 2、在Vue组件中引入并使用html2canvas、file-saver import html2canvas fro…

工作问题记录(持续更新中)

一、backdrop-filter:blur(20px); 毛玻璃效果&#xff0c;在安卓机上有兼容问题&#xff0c;添加兼容前缀也无效&#xff1b; 解决方案&#xff1a;让设计师调整渐变&#xff0c;不要使用该属性! 复制代码 background: radial-gradient(33% 33% at 100% 5%, #e9e5e5 0%, rgba…