Loggers 配置解析

我们通过下面的例子来理解 log4j 的 Loggers 配置是如何决定日志输出规则的。

<Loggers><!-- 根Logger:全局配置 --><Root level="debug"><AppenderRef ref="consoleAppender" level="info"/><AppenderRef ref="allFileAppender" level="all"/><AppenderRef ref="debugFileAppender" level="debug"/><AppenderRef ref="infoFileAppender" level="info"/><AppenderRef ref="warnFileAppender" level="warn"/><AppenderRef ref="errorFileAppender" level="error"/></Root><!-- 自定义Logger:特定模块配置 --><Logger level="trace" name="com.ruoyi.admin.log"><AppenderRef ref="allFileAppender" level="all"/></Logger></Loggers>

这个配置结合了根 Logger 和自定义 Logger,并实现了分模块、分级别的日志记录策略。理解关键在于层级关系、继承机制和级别过滤的相互作用。

日志输出规则

  1. 层级继承
    • 所有 Logger 默认继承根 Logger 配置
    • com.ruoyi.admin.log及其子包的日志优先使用自定义 Logger 配置。即有子类的情况优先采用子类定义的规则。这点可以类比 Java 中的父类与子类关系。
  2. additivity 属性
    • 未显式设置时默认为 true(即日志会同时传递给自定义 Logger 和根 Logger)
    • 这可能导致重复记录(稍后详解)
  3. 双层过滤
    日志需通过:
    • Logger 级别过滤(第一层)
    • Appender 级别过滤(第二层)

各 Appender 输出内容分析

1. 根 Logger 的 Appender(处理非 com.ruoyi.admin.log 包日志)
Appender输出内容实际输出级别范围
consoleAppender所有包的INFO+日志INFO, WARN, ERROR, FATAL
allFileAppender所有包的DEBUG+日志(不包含TRACE)DEBUG, INFO, WARN, ERROR
debugFileAppender所有包的DEBUG+日志DEBUG, INFO, WARN, ERROR
infoFileAppender所有包的INFO+日志INFO, WARN, ERROR, FATAL
warnFileAppender所有包的WARN+日志WARN, ERROR, FATAL
errorFileAppender所有包的ERROR+日志ERROR, FATAL

📌 注意:根Logger的level="debug"过滤掉了TRACE日志,因此allFileAppender也捕获不到TRACE

2. 自定义Logger的Appender(专用于com.ruoyi.admin.log包)
Appender输出内容实际输出级别范围
allFileAppendercom.ruoyi.admin.log包的TRACE+日志TRACE, DEBUG, INFO, WARN, ERROR
3. 关键交叉点:com.ruoyi.admin.log包的日志

由于additivity=true(默认),该包的日志会同时被:

  • 自定义Logger处理
  • 根Logger处理
com.ruoyi.admin.log日志
自定义Logger
根Logger
allFileAppender
根Logger的所有Appender
具体输出示例(以DEBUG日志为例)
  1. 自定义Logger路径
    DEBUG日志 → 通过trace级别 → allFileAppender(level=all) → 输出
  2. 根Logger路径
    DEBUG日志 → 通过debug级别 → 根Logger的Appender二次过滤:
    • allFileAppender(level=all) → 输出
    • debugFileAppender(level=debug) → 输出
    • infoFileAppender(level=info) → 丢弃
    • …其他同理
结果:重复记录问题

allFileAppender 会记录两次 com.ruoyi.admin.log 的DEBUG日志,表现为 allFileAppender 指定的日志输出文件中会打印两次相同的日志。

  1. 来自自定义Logger
  2. 来自根Logger

优化建议:避免重复记录

增加additivity="false"属性:

<Logger level="trace" name="com.ruoyi.admin.log" additivity="false"><AppenderRef ref="allFileAppender" level="all"/>
</Logger>

优化后效果:

日志来源allFileAppender其他Appender
com.ruoyi.admin.log根Logger的DEBUG+日志按各自级别过滤
com.ruoyi.admin.log该包的TRACE+日志不再出现

即只有 allFileAppender 能输出 com.runyi.admin.log 及其子包中的日志。

最终输出总结(优化后配置)

Appender输出内容覆盖范围
consoleAppender全局INFO+日志(不含特殊包)非特殊包
allFileAppender全局DEBUG+日志 + 特殊包TRACE+日志所有包,不同级别
debugFileAppender全局DEBUG+日志(不含特殊包)非特殊包
infoFileAppender全局INFO+日志(不含特殊包)非特殊包
warnFileAppender全局WARN+日志(不含特殊包)非特殊包
errorFileAppender全局ERROR+日志(不含特殊包)非特殊包

特殊包:com.ruoyi.admin.log及其子包

这种配置实现了:

  1. 生产环境安全:默认只记录DEBUG+日志
  2. 关键模块追踪:特定包记录最详细的TRACE日志。可以调试用。
  3. 分类存储:不同级别日志分离到不同文件
  4. 控制台精简:只显示INFO+关键信息

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

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

相关文章

Java 大视界 -- Java 大数据在智能政务舆情监测与引导中的情感分析与话题挖掘技术(272)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

[NocoDB] 在局域网中调整Float类型显示精度的部署经验

在单位局域网环境中,NocoDB有效地连接MySQL数据库和前端服务,做为中间件很方便。然而,在实际应用中,我们也会遇到一些较为隐藏的设置问题,比如此次经历的 float 显示精度不匹配问题。 问题环境 实际数据库:MySQL,表中有 float 类型的数据 原始数据来源:Excel表格 数据转…

Dockerfile 常见指令详解

Dockerfile 是一个文本文件&#xff0c;包含了一系列用于构建 Docker 镜像的指令。以下是 Dockerfile 中常见指令的详细解释&#xff1a; 基础指令 1. FROM 指定基础镜像&#xff0c;必须为第一条指令&#xff08;注释除外&#xff09;。 FROM ubuntu:20.04 FROM python:3.…

InnoDB Cluster 与 NDB Cluster 对比及部署指南

InnoDB Cluster 与 NDB Cluster 对比及部署指南 一、核心区别对比 特性InnoDB ClusterNDB Cluster存储引擎InnoDBNDB (内存优先)架构设计基于Group Replication分布式架构(数据节点管理节点SQL节点)一致性模型最终一致性/强一致性强一致性数据持久化磁盘存储为主内存存储为主…

PySide环境配置及工具使用

文章目录 [toc]1 概述1.1 PySide 能做什么&#xff1f;1.2 PySide 的优点1.3 PySide 的缺点1.4 示例代码&#xff08;简单窗口&#xff09; 2 环境准备2.1 安装必要软件2.2 修改 pip 源 3 PySide23.1 环境要求3.2 配置PySide23.3 工具配置 4 PySide64.1 环境4.2 配置PySide64.3…

数据标注师学习内容

目录 文本标注词性标注实体标注 图像标注语音标注 文本标注 词性标注 第一篇 第二篇 实体标注 点击这里 关系标注 事件标注 意图标注 关键词标注 分类标注 问答标注 对话标注 图像标注 拉框标注 关键点标注 2D标注 3D标注 线标注 目标跟踪标注 OCR标注 图像分类标注 语音…

【linux】文件与目录命令 - rsync

文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 rsync 命令用于快速同步文件和目录&#xff0c;可用于本地和远程传输&#xff0c;支持增量同步、压缩、权限保留等特性。 1. 基本用法 语法&#xff1a; rsync [选项] 源 目标功能&#xff1a; 高效增量同步&#xff…

互联网大厂Java求职面试:电商系统高并发设计

互联网大厂Java求职面试&#xff1a;电商系统高并发设计 文章内容 面试官&#xff08;技术总监&#xff09;与郑薪苦的对话 面试官&#xff1a; “郑薪苦&#xff0c;欢迎来到我们的面试。今天我们会围绕一个非常热门的话题——电商系统的高并发设计进行深入探讨。你之前在某…

Nginx跨云反向代理排错:解密配置参数的“陷阱”

前言&#xff1a;在当今的云计算环境中&#xff0c;跨云平台的应用部署变得越来越常见。为了验证跨云平台反向代理的可行性&#xff0c;我们进行了一次测试。本次测试将后端程序部署在阿里云服务器&#xff0c;同时使用在腾讯云注册的已备案国内域名。我们在腾讯云控制台将域名…

股票账户的管理和交易

中国证券登记结算有限责任公司&#xff08;简称“中国结算”&#xff09;确实是负责股票的账户管理&#xff08;开户、销户&#xff09;和登记、存管、清算、交收等后台业务的中央机构。它确保了股票所有权的准确记录和交易后资金与证券的最终转移。 而股票的交易业务&#xff…

Arcgis地理配准变换方法说明

零阶多项式 - 将使用零阶多项式来平移数据。 当已对数据进行地理配准但通过微小的平移可以更好的排列数据时&#xff0c;通常使用该多项式。 执行零阶多项式平移只需要一个连接线。相似性多项式 - 将使用一阶变换&#xff0c;尝试保持原始栅格的形状。 RMS 错误会高于其他多项式…

深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点

一、volatile volatile是C中一个非常重要的关键字。volatile关键字告诉编译器&#xff0c;被修饰的变量可能会在程序控制之外被改变&#xff0c;因此编译器不能对该变量的访问进行优化。什么意思呢&#xff1f;现代处理器架构中&#xff0c;有寄存器&#xff0c;L1缓存&#x…

跨主机管理Docker容器化应用的操作与技巧

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; 环境准备与 Docker 安装 在开始跨主机管理 Docker 容器化应用之前&#xff0c;需要确保所有主机上都安装了 Docker 引擎&#xff0c;并且这些主机之间可以通过 SSH 协议进行通信。本节将详细介绍环境准备和 Doc…

编程实践:sigmastar330 调用IVE图像处理加速

说明:本专栏文章有两种解锁方案 1:付费订阅,畅享所有文章 2:免费获取,点击下方链接,关注,自动获取免费链接 https://free-img.400040.xyz/4/2025/04/29/6810a50b7ac8b.jpg 主题:利用IVE进行图像处理加速 Sigmastar 支持的硬件操作,基本都在:mi_ive.h 文件中,本文…

Nginx+PHP+MySQL安装参考

NginxPHPMySQL安装参考 CentOS7环境 配置CentOS7网络&#xff1a; CentOS(最小安装)默认是不打开网络的 启动网络 vi打开&#xff1a;/etc/sysconfig/network-scripts/ifcfg-ens33 文件 将 “ONBOOT:no”属性修改为&#xff1a;“ONBOOT:yes” 重启网络服务 # sudo service …

JavaScript中的反射魔法:揭秘Reflect对象的核心方法(下)

JavaScript中的Reflect对象&#xff1a;高级方法解析&#xff08;下&#xff09; 在JavaScript中&#xff0c;Reflect对象不仅提供了基础的对象操作方法&#xff08;如get、set等&#xff09;&#xff0c;还包含了许多高级API&#xff0c;用于更精细地控制对象行为。本文将继续…

【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能

一、创建自己的应用 百度智能云控制台网址&#xff1a;https://console.bce.baidu.com/ 1、创建应用 2、获取APIKey和SecretKey 3、Api调试 调试网址&#xff1a;https://console.bce.baidu.com/support/?timestamp1750317430400#/api?productAI&project%E8%AF%AD%E9%…

银河麒麟 | ubuntu 搭建属于自己的邮件服务器

目录 遇权不绝就转root 更新系统 安装 Postfix 配置 Postfix 重启 Postfix 安装 Dovecot 配置 Dovecot 编辑 Dovecot 的 IMAP 配置文件 编辑 Dovecot 的用户认证配置文件 编辑 Dovecot 的服务配置文件 重启 Dovecot 安装发送邮箱功能 发送邮件 测试 遇权不绝就转…

嵌入式通信协议框架的四层架构设计与实现

文章目录 一、硬件抽象层&#xff1a;数据收发的基石1.1 设计要点1.2 代码示例 二、协议管理层&#xff1a;智能路由中枢2.1 设计要点2.2 代码示例 三、协议处理层&#xff1a;协议具体实现3.1 设计要求3.2代码示例3.2.1 协议公共定义3.2.2 协议一设计3.2.3 协议二设计 四、应用…

RA信号处理

ra_snr_gui.m 作用&#xff1a;统计不同信噪比下&#xff0c;五种信号的峰值旁瓣比RA和低高频均值比RM&#xff0c;绘制结果&#xff0c;参考图3.11和3.12 DFCW_RA_SNR.m 作用&#xff1a;产生正交离散频率编码信号&#xff0c;并计算峰值旁瓣比RA和低高频均值比 RM LFM_RA_S…