Logback
Logback
简介
SpringBoot 内置日志框架
用来自定义控制台日志输出样式、生成日志文件
使用
由于是内置所以不需要引入,稍加配置就可以直接使用。
内置源头查看


配置application.yml
# 日志配置
logging:level:com.ruoyi: @logging.level@org.springframework: warnconfig: classpath:logback-plus.xml
- com.ruoyi包下是@logging.level@级别的日志
- org.springframework包下是warn级别
- 使用logback-plus.xml作为日志的配置(自定义)
定义pom.xml
<profiles><profile><id>local</id><properties><!-- 环境标识,需要与配置文件的名称相对应 --><profiles.active>local</profiles.active><logging.level>info</logging.level></properties></profile><profile><id>dev</id><properties><!-- 环境标识,需要与配置文件的名称相对应 --><profiles.active>dev</profiles.active><logging.level>info</logging.level></properties><activation><!-- 默认环境 --><activeByDefault>true</activeByDefault></activation></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active><logging.level>warn</logging.level></properties></profile></profiles>
dev环境使用 info级别的日志,默认 dev 环境,prod 环境使用 warn级别的日志
Java 中获取并使用日志记录器
//创建测试Controller 路径为 com.ruoyi.demo.controller.LogController
Logger logger = LoggerFactory.getLogger("com.ruoyi.demo.controller.LogController")
Logger logger = LoggerFactory.getLogger(LogController.class)
logger.trace("跟踪")
logger.debug("调试")
logger.info("信息")
logger.warn("警告")
logger.error("错误")
日志级别从低到高排序 trace < debug < info < warn < error
在 application.yml里面配置过com.ruoyi包下日志级别是 @logging.level@
当前我们激活的是 dev 环境,pom.xml里面定义了 dev 环境激活的日志级别是info
所以当前logger只会打印 info及以上级别的日志
日常:使用 @Slf4j 注解,直接写在类上,Lombok会自动一个日志记录器 log ,直接调用log.info(“信息”)等等同上。
logback-plus.xml
大体上就是< property >可理解为定义变量,< appender >可理解为日志输出组件,调用变量来控制日志输出的目的地、同时可以自定义配置输出的格式、文件名、最大限制、最大历史记录、过滤级别,循环的策略等等,< root >用来定义全局都使用相同的日志输出组件配置。
使用上基本就是复制粘贴,有自己个性化的需求在对照官网进行修改即可 ==> Logback 官网
<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="log.path" value="./logs"/><property name="console.log.pattern"value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${console.log.pattern}</pattern><charset>utf-8</charset></encoder></appender><!-- 控制台输出 --><appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-console.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大 1天 --><maxHistory>1</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern><charset>utf-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 过滤的级别 --><level>INFO</level></filter></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><!-- info异步输出 --><appender name="async_info" class="ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="file_info"/></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><!--系统操作日志--><root level="info"><appender-ref ref="console" /><appender-ref ref="async_info" /><appender-ref ref="async_error" /><appender-ref ref="file_console" /></root></configuration>
UP!
相关文章:
Logback
Logback 简介 SpringBoot 内置日志框架 用来自定义控制台日志输出样式、生成日志文件 使用 由于是内置所以不需要引入,稍加配置就可以直接使用。 内置源头查看 配置application.yml # 日志配置 logging:level:com.ruoyi: logging.levelorg.springframework: war…...
Sub - Adjacent Transformer — 对AT的有趣改进
出处:IJCAI 2024 未开源,链接貌似是:jackyue1994/Sub-Adjacent-Transformer (github.com) 贡献:1. 提出:基于 “次邻域” 及 “注意力贡献” 的注意力学习机制,以增强异常、正常的区分;2. 首次…...
『Mysql集群』Mysql高可用集群之主从复制 (一)
Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…...
PHP获取图片属性(size, width, 和 height)的函数
在PHP中,要获取图片的尺寸(宽度和高度),你可以使用 getimagesize() 函数。这个函数不仅返回图片的宽度和高度,还返回图片的类型和MIME类型等信息。 以下是 getimagesize() 函数的基本用法: <?php /…...
MySQL启动失败解决方案
目录 引言 一、查看/启动mysql服务的两种方式 方法一: 方法二: 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…...
Spring Boot中使用MyBatis-Plus和MyBatis拦截器来实现对带有特定注解的字段进行AES加密。
1. 添加依赖 首先,在pom.xml文件中添加必要的依赖项: xml 深色版本 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifac…...
Python GUI 编程:tkinter 初学者入门指南——框架、标签框架
在本文中,将介绍 tkinter Frame 框架小部件、 LabelFrame 标签框架小部件的使用方法。 Frame 框架 Frame 框架在窗体上建立一个矩形区域,作为一个容器,用于组织分组排列其他小部件。 要创建框架,请使用以下构造函数。 frame …...
Mac 远程 Windows 等桌面操作系统工具 Microsoft Remote Desktop for Mac 下载安装详细使用教程
最近需要在 Mac 上远程连接控制我的 windows 电脑系统,经过一番尝试对于 win 来说还是微软自家推出的 Microsoft Remote Desktop for Mac 最最好用,没有之一 简介 Microsoft Remote Desktop是一款由微软公司开发的远程桌面连接工具,可以让用…...
初级网络工程师之从入门到入狱(四)
本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、Wlan应用实战1.1、拓扑图详解1.2、LSW11.3、AC11.4、抓包1.5、Tunnel隧道模式解析1.6、AP、…...
MinIO配置与使用
在数字化时代,数据存储与管理变得尤为重要,尤其是对于非结构化数据如日志文件的处理。MinIO,作为一个高性能、可扩展的分布式对象存储系统,以其对Amazon S3的全面兼容性和轻量级设计,成为了众多企业和开发者存储大量数…...
【漏洞复现】SpringBlade menu/list SQL注入漏洞
》》》产品描述《《《 致远互联智能协同是一个信息窗口与工作界面,进行所有信息的分类组合和聚合推送呈现。通过面向角色化、业务化、多终端的多维信息空间设计,为不同组织提供协同门户,打破组织内信息壁垒,构建统一协同沟通的平台。 》》》漏洞描述《《《 致远互联 FE协作办公…...
物联网智能项目(含案例说明)
物联网(Internet of Things,简称IoT)智能项目是指利用物联网技术将各种物理设备、传感器、软件、网络等连接起来,实现设备之间的互联互通,并通过数据采集、传输、处理和分析,实现智能化管理和控制的项目。以…...
【YOLOv8改进】 YOLOv8 更换骨干网络之GhostNetV3步骤详解
这里yolov8源码版本是 ultralytics-8.2.54 GhostNetV3 源码下载 https://codeload.github.com/huawei-noah/Efficient-AI-Backbones 将ghostnetv3.py文件复制一份到源码./ultralytics-8.2.54/ultralytics/nn/modules路径下 我根据mobilenetv4的教程,修改了ghostne…...
成绩查询小程序,家长查分超方便~
这都马上2025年了,我不相信还有老师不知道怎么发成绩,如果你不知道,那么这篇文章不要错过,推荐给大家我用了7年的发成绩工具 易查分,新版本更新之后,发成绩只需要一分钟的时间即可生成一个成绩查询系统。 …...
鸿蒙开发(NEXT/API 12)【上传下载文件】远场通信场景
场景介绍 本协议栈框架支持将文件上传到服务器或者从服务器下载文件。 开发步骤 导包。 import { rcp } from kit.RemoteCommunicationKit; import {fileIo} from kit.CoreFileKit;下载文件。 let SESSION_CONFIG: rcp.SessionConfiguration {// 此处请根据业务设置合适的…...
快速理解AUTOSAR CP的软件架构层次以及各层的作用
在 AUTOSAR CP 的架构中,软件分为 应用层 (App)、运行时环境 (RTE) 和 基础软件层 (BSW) 三个主要层级。下面是每一层的主要功能与简单的代码示例来展示它们之间的关系。 1. 概述 应用层 (App):包含应用程序代码,主要实现业务逻辑。应用层通…...
【Unity】Unity中接入Admob聚合广告平台,可通过中介接入 AppLovin,Unity Ads,Meta等渠道的广告
一、下载Google Admob的SDK插件 到Google Admob官网中,切换到Unity平台 进来之后是这样,注意后面有Unity标识,然后点击下载,跳转到github中,下载最新的Admob插件sdk,导入到Unity中 二、阅读官方文档&…...
PythonExcel批量pingIP地址
问题: 作为一个电气工程师(PLC),当设备掉线的时候,需要用ping工具来检查网线物理层是否可靠连接,当项目体量过大时,就不能一个手动输入命令了。 解决方案一: 使用CMD命令 for /L %…...
软媒市场新蓝海:软文媒体自助发布与自助发稿的崛起
在信息时代的浪潮中,软媒市场以其独特的魅力和无限的潜力,成为了企业营销的新宠。随着互联网的飞速发展,软文媒体自助发布平台应运而生,为企业提供了更加高效、便捷的营销方式。而自助发稿功能的加入,更是让软媒市场的蓝海变得更加广阔。 软媒市场的独特价值 软媒市场之所以能…...
【笔记】Day2.5.1查询运费模板列表(未完
(一)代码编写 1.阅读需求,确保理解其中的每一个要素: 获取全部运费模板:这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序:这意味着查询结果需要根据模板的创建时间进行排序࿰…...
G-Helper:华硕ROG笔记本性能调校的轻量级解决方案
G-Helper:华硕ROG笔记本性能调校的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: h…...
sklearn分类报告报错?一招解决UndefinedMetricWarning的零除问题
机器学习模型评估中的UndefinedMetricWarning:从原理到实战解决方案 当你第一次看到控制台弹出"UndefinedMetricWarning: Precision and F-score are ill-defined"的红色警告时,是不是感觉一头雾水?这个看似简单的警告背后&#x…...
吴恩达Agentic AI教程·模块5:高度自主智能体的模式 知识点总结
吴恩达Agentic AI教程模块5:高度自主智能体的模式 知识点总结一、规划设计模式(高度自主智能体的核心模式)1.1 规划设计模式的核心定义与价值1.1.1 核心定义1.1.2 核心价值1.2 规划设计模式的基础流程与示例1.2.1 基础流程1.2.2 示例1&#x…...
别再手动装Office了!用Docker和LinuxServer.io镜像,5分钟搞定LibreOffice在线办公环境
5分钟极速部署:用Docker打造即开即用的LibreOffice云办公环境 你是否经历过这样的崩溃时刻?临时需要处理一份文档,却发现系统里的办公软件版本老旧、字体缺失;或是刚重装系统,又要花半小时等待Office安装进度条爬完。更…...
Paimon数据湖实战:Merge Engines深度解析与应用场景
1. Paimon数据湖中的Merge Engines核心机制 第一次接触Paimon的Merge Engines时,我完全被它强大的数据合并能力震撼到了。这就像是一个智能的数据管家,能够根据不同的业务需求,自动帮你处理各种复杂的数据合并场景。在实际项目中,…...
别再折腾无障碍服务了!用Android蓝牙HID实现投屏反控的保姆级避坑指南
蓝牙HID协议在Android投屏反控中的深度实践 如果你正在开发一款类似Scrcpy的Android投屏工具,肯定遇到过这样的困境:无障碍服务(AccessibilityService)的授权流程繁琐且容易被厂商拦截,反射调用InputManagerService又需要系统级权限。这时候&…...
Buildah多平台容器构建终极指南:使用QEMU跨架构构建Docker镜像
Buildah多平台容器构建终极指南:使用QEMU跨架构构建Docker镜像 【免费下载链接】buildah A tool that facilitates building OCI images. 项目地址: https://gitcode.com/gh_mirrors/bu/buildah Buildah作为专业的OCI镜像构建工具,为开发者提供了…...
TOPSIS算法实战:用Python给河流水质排个名,附完整代码与避坑指南
TOPSIS算法实战:用Python给河流水质排个名,附完整代码与避坑指南 当环保部门拿到一份包含含氧量、PH值、细菌数、水草量等指标的河流水质数据时,如何科学评估各条河流的健康状况?传统的主观评分方法往往存在偏差,而TOP…...
Qwen3-ASR-1.7B问题解决:服务重启、音频格式兼容全攻略
Qwen3-ASR-1.7B问题解决:服务重启、音频格式兼容全攻略 1. 引言:语音识别服务的稳定性挑战 语音识别技术正在改变我们处理音频内容的方式,但在实际部署中,服务稳定性和格式兼容性常常成为绊脚石。Qwen3-ASR-1.7B作为阿里云通义千…...
Bedook超声波传感器应用测试
⒈实物和型号⑴产品型号:Bedook UM30-T20P-C31S12-X(PNP型)⑵实物图片:⑶产品规格:一般说明感应距离150…2000mm调节范围200…2000mm盲区0…150mm标准检测物100mm100mm换能器频率112kHz响应延时出厂设定200ms工作方式/…...
