当前位置: 首页 > news >正文

Logback 实现不同包的日志记录到不同文件

核心

  1. 通过合理配置多个 appender 来定义不同的日志输出目的地
  2. 通过 logger 元素将不同的包与对应的 appender 关联起来
  3. 同时利用 additivity 属性控制日志的传递,从而实现精准的日志输出管理。
additivity 属性控制日志传递:

additivity 属性决定了该 logger 的日志是否会传递给父 logger。将其设置为 false 时,该 logger 的日志只会输出到与之关联的 appender,不会再传递给根 logger,从而保证不同包的日志能准确输出到各自对应的文件。
appender-ref 关联 appender:通过 appender-ref 元素将 logger 与特定的 appender 关联起来。例如 表示将 com.example.package1 包的日志输出到 PACKAGE1_FILE appender 对应的文件。

xml定义

<configuration><!-- 控制台输出 appender --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 包1的文件输出 appender --><appender name="PACKAGE1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/package1.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logs/package1.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 包2的文件输出 appender --><appender name="PACKAGE2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/package2.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>logs/package2.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 根 logger,输出到控制台 --><root level="info"><appender-ref ref="CONSOLE" /></root><!-- 包1的 logger,输出到对应的文件 --><logger name="log-package1" level="debug" additivity="false"><appender-ref ref="PACKAGE1_FILE" /></logger><!-- 包2的 logger,输出到对应的文件 --><logger name="log-package2" level="debug" additivity="false"><appender-ref ref="PACKAGE2_FILE" /></logger></configuration>    

Java代码

在定义logger处指定名称

    private static final Logger logger = LoggerFactory.getLogger("log-package1");private static final Logger logger = LoggerFactory.getLogger("log-package1");

拓展

Logger 的 name 属性的作用
  1. name 属性的作用
  • 层次结构标识:Logger 名称采用点分层次结构(如 “com.example.service”),形成父子关系

  • 日志路由:决定哪些日志事件由哪个 Logger 处理

  • 继承配置:子 Logger 可以继承父 Logger 的配置

  1. 命名规则
  • 通常使用类的全限定名作为 Logger 名称(惯例)
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
  • 也可以是任意有意义的字符串名称

  • 区分大小写

  1. 继承机制
    子 Logger 会继承父 Logger 的:
  • 日志级别(如果子 Logger 未显式设置)
  • Appender(除非设置 additivity=“false”)
  1. 特殊的rootLogger
  • 名称固定为 “ROOT”
  • 所有 Logger 的最终父节点
  • 必须配置,通常作为默认日志处理者
  • 不可以配置多个,官方文档明确指出 “配置中只能有一个 root logger”,但实现上选择了"最后生效"的宽松处理方式
<root level="INFO"><appender-ref ref="CONSOLE"/>
</root>
实例
<!--根,默认日志处理器--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /><appender-ref ref="console" /></root><!--子,设定不同日志级别--><logger name="com.ruoyi" level="info" /><logger name="org.springframework" level="warn" /><!--相对独立的user日志--><logger name="sys-user" level="info" addativity="false"><appender-ref ref="sys-user"/></logger>

相关文章:

Logback 实现不同包的日志记录到不同文件

核心 通过合理配置多个 appender 来定义不同的日志输出目的地通过 logger 元素将不同的包与对应的 appender 关联起来同时利用 additivity 属性控制日志的传递&#xff0c;从而实现精准的日志输出管理。 additivity 属性控制日志传递&#xff1a; additivity 属性决定了该 l…...

【附JS、Python、C++题解】Leetcode面试150题(11)H指数

一、题目 274. H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xf…...

C++第13届蓝桥杯省b组习题笔记

1.九进制转十进制 九进制正整数 (2022)9转换成十进制等于多少&#xff1f; 第一位乘9的0次方&#xff0c;第二位乘9的1次方&#xff0c;第三位乘9的二次方以此类推 #include <iostream> using namespace std;int main() {// 请在此输入您的代码int t2022;int res0;int c…...

【学Rust写CAD】19 颜色渐变定义(gradient_stop.rs)

源码 //color/gradient_stop.rs use super::argb::Color; #[derive(Clone, Copy, Debug)] pub struct GradientStop {pub position: f32,pub color: Color, }代码分析 这段代码是一个结构体&#xff08;struct&#xff09;&#xff0c;并为其派生&#xff08;derive&#xff…...

从零开始跑通3DGS教程:介绍

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章&#xff0c;将实现从原始图像(有序、无序)数据开始&#xff0c;经过处理(视频抽帧成有序)&#xff0c;SFM&#xff0c;3DGS训练、编辑、渲染等步骤&#xff0c;完整地呈现从原始图像到新视角合成的全部流程&#x…...

探索 Python 编程的宇宙:从基础到进阶的奇妙之旅

在当今的编程世界里&#xff0c;Python 以其简洁、易读和强大的功能&#xff0c;成为了众多开发者的心头好。它就像一个充满无限可能的宇宙&#xff0c;吸引着人们不断去探索其中的奥秘。今天&#xff0c;让我们一起踏上这场 Python 编程的奇妙之旅&#xff0c;从基础到进阶&am…...

使用 Spring AI 和 LangChain4j 实现聊天机器人对比分析

人工智能领域正在彻底改变公司管理客户服务的方式。随着 Spring AI 和 LangChain4j 等专用框架的出现&#xff0c;Java 开发人员现在拥有强大的工具来实现能够从公司数据中学习的智能聊天机器人。在本文中&#xff0c;我们将探讨这两个框架的主要功能&#xff0c;并了解如何使用…...

3月31(信息差)

1.全国首个!湖北为脑机接口医疗服务定价 据湖北省医疗保障局消息,今日,湖北省医保局发布全国首个脑机接口医疗服务价格,其中,侵入式脑机接口植入费6552 元/次,侵入式脑机接口取出费3139元/次,非侵入式脑机接口适配费966元/次,标志着这一前沿科技正式步入民生领域,为无…...

苍穹外卖项目结构

苍穹外卖项目总结-CSDN博客 【苍穹外卖|项目】万字总结-CSDN博客 苍穹外卖项目总结_苍芎外卖如何实现的跨域-CSDN博客 【苍穹外卖 | 项目日记】第九天 万字总结-CSDN博客 【苍穹外卖|项目】万字总结-CSDN博客 一、技术点&#xff1a; Nginx代理 负载均衡&#xff1a;通过…...

3. 无重复字符的最长子串

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 用map&#xff0c;key为char&#xff0c;value为出现次数&#xff0c;将字符串中的值依次入栈&#xff0c;再判断次数是否大于1&#xff0c;如果大于1&#xff0c;则循环删除掉…...

python力扣48.旋转图像

给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…...

文章配图新纪元:OpenAI新推出的GPT-4o原生图像生成功能启示

当OpenAI推出GPT-4o原生图像生成功能时&#xff0c;许多人惊呼&#xff1a;“AI生成的图像已经发展到这样了吗&#xff01;”这一激动人心的时刻&#xff0c;标志着人工智能在图像创作领域迈出了历史性的一步。无论是细腻的人物肖像&#xff0c;栩栩如生的面部表情&#xff0c;…...

使用Google Gemini API密钥创建AI驱动的Chrome扩展程序

在这个快节奏的数字时代,我们高度依赖Chrome扩展程序来提升浏览效率。 但你是否想过用人工智能为你的扩展注入超能力?听起来很酷对吧?😎 随着谷歌Gemini API的发布,AI技术变得触手可及。 该API能让你在项目中直接调用先进的自然语言处理、图像识别等炫酷的AI功能。 更…...

MapReduce的工作原理

MapReduce 是 Hadoop 的核心计算框架&#xff0c;用于分布式处理大规模数据集。它的核心思想是 **"分而治之"**&#xff0c;将任务拆分为多个子任务并行处理&#xff0c;最终汇总结果。以下是其工作原理的详细解析 1. 核心阶段 MapReduce 的执行过程分为三个阶段&a…...

k8s网络策略

k8s网络策略 k8s网络测试概述查看防火墙策略 k8s网络策略网络访问控制案例&#xff1a;配置k8s网络策略结果验证 k8s网络策略配置示例 k8s网络测试概述 网络策略就是设置防火墙 查看防火墙策略 # 获取当前命名空间下的所有 NetworkPolicy 资源&#xff08;网络策略&#xff0…...

Linux文件描述符的分配机制与重定向实现:揭开“一切皆文件”的面纱

Linux系列 文章目录 Linux系列前言一、Linux的标准流二、文件描述符分配规则三、文件重定向四、Linux下一切皆文件 前言 上篇我们介绍了语言和系统层次的基础I/O文件操作&#xff0c;其涉及的知识有&#xff1a;C语言文件操作和系统调用接口两者的关系、文件描述符的概念、操作…...

SpringBoot事务管理(四)

记录几条SpringBoot事务管理中踩过的坑及解决办法&#xff1a; 1. 自调用问题 问题描述 在同一个类中&#xff0c;一个非事务方法调用另一个有 Transactional 注解的事务方法&#xff0c;事务不会生效。因为 Spring 的事务管理是基于 AOP 代理实现的&#xff0c;自调用时不会…...

iOS GCD

GCD 任务队列 主队列&#xff1a; 任务在主线程执行&#xff0c;主队列是一个串行队列&#xff0c;它主要处理 UI 相关任务&#xff0c;也可以处理其他类型任务&#xff0c;但为了性能考虑&#xff0c;尽量让主队列执行 UI 相关或少量不耗时间和资源的操作。 系统全局并发队…...

Hadoop集群的常用命令

1.基本命令 启动 Hadoop: start-dfs.sh start-yarn.sh 这些命令会分别启动 Hadoop 的 DFS 和 YARN。 查看 Hadoop 目录: hdfs dfs -ls -R / 该命令会递归地列出 HDFS 根目录下的所有文件和目录。 创建目录: hdfs dfs -mkdir /example_dir 在 HDFS 中创建一个新目录。 上传文…...

Kafka 实战指南:原理剖析与高并发场景设计模式

一、介绍 Kafka是由 Apache 软件基金会开发的开源流处理平台&#xff0c;作为高吞吐量的分布式发布订阅消息系统&#xff0c;采用 Scala 和 Java 编写。 Kafka是一种消息服务&#xff08;MQ&#xff09;&#xff0c;在理论上可以达到十万的并发。 代表的MQ软件—— kafka 十万…...

黑盒测试的判定表法(能对多条件依赖关系进行设计测试点)

定义: 判定表是分析和表达多逻辑条件下执行不同操作的工具。就是指把所有的输入条件、所有可能采取的动作按表格列出来&#xff0c;每一种条件和动作的组合构成一条规则&#xff0c;也即一条用例。 1.判定表法的引用 等价类边界值分析法主要关注单个输入类条件的测试并未考虑…...

SQLMesh系列教程:基于指标构建一致的分析语义层应用实践

本文深入探讨SQLMesh指标框架的核心概念、定义方法及应用场景。通过统一的语义层管理&#xff0c;SQLMesh解决了数据分析中指标定义不一致的痛点&#xff0c;实现了跨团队协作的数据一致性。文章包含指标定义语法详解、自动表连接机制解析、派生指标构建方法&#xff0c;并通过…...

解决Docker端口映射后外网无法访问的问题

一、前言 今天因为服务器宕机&#xff0c;重新启动后发现docker部署的mysql和redis都无法通过外网访问。经过排查原因是ip转发没有开启。下面教大家如何解决 二、问题排查 (1) 查看防火墙运行情况 使用firewall-cmd --state 如果防火墙处于not running&#xff0c;则可以排…...

如何指定运行amd64架构的ubuntu?

如何指定运行amd64架构的ubuntu 下面这个命令如何制定运行amd64架构的ubuntu&#xff1f; docker run -it -v $(pwd):/workspace ubuntu:20.04 bash这个命令已经非常接近正确运行一个基于 amd64 架构的 Ubuntu 容器了&#xff0c;但如果你想明确指定运行 amd64 架构的镜像&am…...

[MySQL]数据类型

数据类型 1.数据类型分类2.数值类型2.1 tinyint类型无符号类型举例 3.bit类型3.1 基本语法 4. 小数类型4.1 float语法4.2 decimal语法 5.字符串类型5.1 char类型5.2 varchar 6.日期类型7.enum和set查询语句 1.数据类型分类 接下来就对上面的四种类型进行介绍 2.数值类型 数值类…...

基于Python的Django框架的手机购物商城管理系统

标题:基于Python的Django框架的手机购物商城管理系统 内容:1.摘要 随着互联网的快速发展&#xff0c;手机购物逐渐成为人们日常生活中不可或缺的一部分。本研究的目的是开发一个基于Python的Django框架的手机购物商城管理系统&#xff0c;以提高购物商城的管理效率和用户体验。…...

大模型在2型糖尿病预测及围手术期管理中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与创新点 二、大模型预测 2 型糖尿病的原理与方法 2.1 大模型概述 2.2 用于 2 型糖尿病预测的大模型类型 2.3 模型训练与数据来源 2.4 预测指标与算法 三、术前风险预测与评估 3.1 血糖控制情况预…...

JavaEE--多线程

一、认识线程 1. 什么是线程 线程&#xff08;Thread&#xff09;是计算机科学中的基本概念&#xff0c;指的是程序内部的一条执行路径。一个进程可以包含多个线程&#xff0c;每个线程共享进程的资源&#xff0c;包括内存空间、文件描述符等。线程可以同时执行多个任务&…...

自动化测试之等待方式

在自动化测试中&#xff0c;等待是一个重要的技术&#xff0c;用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作&#xff0c;提高自动化测试的稳定性以及可靠性。 等待方式&#xff1a;显示等待、隐式等待、线程睡眠 1. 显式等…...

git中用于生成commitId与其父commitId间的文件差异文件树

生成commitId与其父commitId间的文件差异文件树 #!/bin/bash # # 用于生成目标commitId与其父commitId间文件差异 # commit_id$1 # 输入目标commit的哈希值 old_dir"old_version" new_dir"new_version"# 创建目录 mkdir -p "$old_dir" "$…...

Ubuntu / Debian 创建快捷方式启动提权

简述 在 Linux 系统中&#xff0c;.desktop 文件是 桌面入口文件&#xff0c;用于在桌面环境&#xff08;如 GNOME、KDE&#xff09;中定义应用程序的启动方式、图标、名称等信息。当你执行 touch idea.desktop 时&#xff0c;实际上创建了一个空的 .desktop 文件&#xff08;…...

VLA 论文精读(三)Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

这篇笔记用来描述 2023年 发表在arxiv上的一篇有关VLA领域的论文&#xff0c;这篇笔记记录的是该论文 2024年03月的改版后。 写在最前面 为了方便你的阅读&#xff0c;以下几点的注意事项请务必了解&#xff1a; 该系列文章每个字都是我理解后自行翻译并写上去的&#xff0c;…...

ASP.NET Core 中实现 SSE 流式响应的简单例子

[HttpGet] public async Task<IActionResult> SseExample() {// 请求头Response.Headers.Add("Content-Type", "text/event-stream");Response.Headers.Add("Cache-Control", "no-cache");Response.Headers.Add("Connectio…...

「Unity3D」TMP_InputField关闭虚拟键盘后,再次打开虚拟键盘,此时无法回调onSelect的问题

TMP_InputField可以注册一个onSelect回调函数&#xff0c;在InputField选中的时候回调&#xff0c;但在虚拟键盘手动关闭或被返回取消的时候&#xff0c;此时再打开虚拟键盘时&#xff0c;就不会调用onSelect。 原因在于&#xff0c;虚拟键盘有三种关闭的操作方式&#xff1a;…...

手工排查后门木马的常用姿势

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 1. 检查异常文件 &#xff08;1&#xff09;查找最近修改的文件 # 查…...

VRRP协议

基础概念 Master 路由器:“Master 路由器”在一个 VRRP 组中承担报文转发任务。在每一个 VRRP 组中&#xff0c;只有 Master 路由器才会响应针对虚拟 IP 地址的 ARP Request。Master 路由器会以一定的时间间隔周期性地发送 VRRP 报文&#xff0c;以便通知同一个 VRRP 组中的 B…...

【JavaEE】MyBatis 综合练习(图书管理系统)

目录 一、数据库表二、引入依赖&#xff1a;三、Model创建四、用户登录五、添加图书六、图书列表七、修改图书八、删除图书九、批量删除十、强制登录 图书管理系统 一、数据库表 我们使用两张表&#xff0c;一张用户表uset_test来记录登录的用户信息&#xff0c;一张图书表boo…...

ArkUI —— 组件导航

创建导航页 // src\main\ets\pages\Index.ets Entry Component struct Index {// 路由栈Provide(pathInfos) pathInfos: NavPathStack new NavPathStack()build() {Navigation(this.pathInfos) {}} }创建导航子页 this.navPath.pushPathByName(AccountTag, 账本分类管理)// …...

数据处理与机器学习入门

一、数据处理概述 数据处理是通过统计学、机器学习和数据挖掘方法从原始数据中提取有价值信息的过程。数据处理的目标是将杂乱无章的原始数据转化为可用于分析和建模的结构化数据。对于小规模数据处理&#xff0c;常用工具分为两类&#xff1a; • 可视化分析工具&#xff1a…...

Markdown在线转word格式

1、打开网址 https://dillinger.io/ 2、输入markdown格式文章 3、直接转换为右边的word格式 4、复制粘贴即可。...

Redis延时队列在订单超时未报到场景的应用分享

一、引言 在电商、医疗预约等众多业务场景中&#xff0c;经常会遇到需要处理超时任务的情况。比如医疗预约订单&#xff0c;如果患者在支付成功后&#xff0c;到了预约结束时间还未报到&#xff0c;系统需要自动取消订单。为了实现这样的功能&#xff0c;我们可以利用 Redis 延…...

vue前端代码作业——待办事项

美化样式示意图&#xff1a; 后端IDEA代码示意图&#xff1a; 代码解释&#xff1a; 1. isAllChecked 计算属性的作用 isAllChecked 用于实现 “全选 / 全不选” 功能&#xff0c;它是一个 双向绑定 的计算属性&#xff08;因为 v-model 需要同时支持读取和设置值&#xff09…...

docker镜像拉取失败

hub.docker.com中提供的docker pull命令在服务器拉取镜像时报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 这个错误通常表明Docker客户…...

Ruby 简介

Ruby 简介 引言 Ruby 是一种广泛使用的动态、开源的编程语言,自 1995 年由日本程序员 Yukihiro Matsumoto(通称 Matz)设计以来,它以其优雅的语法、强大的库支持和跨平台特性赢得了全球开发者的青睐。本文将详细介绍 Ruby 的起源、特点、应用领域以及它在现代软件开发中的…...

解决 FFmpeg 使用 C/C++ 接口时,解码没有 shell 快的问题(使用多线程)

一、问题 硬件设备为香橙派 5Plus&#xff0c;最近需要使用硬件视频解码来加速 YOLO 的检测&#xff0c;shell 窗口的FFmpeg已经调通&#xff0c;详见文章&#xff1a; 编译支持 RKmpp 和 RGA 的 ffmpeg 源码_rk3588 ffmpeg mpp-CSDN博客https://blog.csdn.net/plmm__/article…...

sqlalchemy:将mysql切换到OpenGauss

说明 之前python的项目使用的mysql&#xff0c;近期要切换到国产数据库OpenGauss。 之前的方案是fastapisqlalchemy&#xff0c;测试下来发现不用改代码&#xff0c;只要改下配置即可。 切换方案 安装openGauss-connector-python-psycopg2 其代码工程在&#xff1a;https:…...

缓存使用纪要

一、本地缓存&#xff1a;Caffeine 1、简介 Caffeine是一种高性能、高命中率、内存占用低的本地缓存库&#xff0c;简单来说它是 Guava Cache 的优化加强版&#xff0c;是当下最流行、最佳&#xff08;最优&#xff09;缓存框架。 Spring5 即将放弃掉 Guava Cache 作为缓存机…...

Qt之Service开发

一、概述 基于Qt的用于开发系统服务(守护进程)和后台服务,有以下几个优秀的开源 QtService 框架和库。 1. QtService (官方解决方案) GitHub: https://github.com/qtproject/qt-solutions/tree/master/qtservice 特点: 官方提供的服务框架 支持 Windows 服务和 Linux 守护…...

ssm框架之Spring

Spring框架介绍 Spring框架是一个轻量级的企业级应用框架 通过它可以贯穿表现层、业务层、持久层。集成方便&#xff0c;简单易用&#xff0c;具有如下特点&#xff1a; Spring框架特色 Spring设计理念 是面向Bean的编程 Spring两大核心技术 控制反转(IoC&#xff1a;Inver…...

Flutter 开发环境配置--宇宙级教学!

目录 一、安装环境&#xff08;Windows&#xff09;二、Android 创建Flutter项目三、VSCode 搭建环境四、补充 一、安装环境&#xff08;Windows&#xff09; Flutter SDK 下载 推荐使用中国镜像站点下载 Flutter SDK&#xff0c;速度更快&#xff1a;中国环境 或者从官网下载…...