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

【Logback详解】

Logback详解

Logback 是一个用于 Java 应用的日志框架,它由 Log4j 的创始人 Ceki Gülcü 创建。Logback 分为三个模块:logback-core、logback-classic 和 logback-access。logback-classic 模块实现了 SLF4J (Simple Logging Facade for Java) API,并添加了一些额外的功能。logback-access 模块与 Servlet 容器集成,提供 HTTP 访问日志功能。

示例

logback.xml 配置文件示例

<configuration><!-- 定义全局属性 --><property name="LOG_PATH" value="logs" /><!-- 控制台输出配置 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 设置编码 --><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 文件输出配置 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名模式 --><fileNamePattern>${LOG_PATH}/application-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 保留7天的日志 --><maxHistory>7</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 日志级别设置 --><root level="info"><!-- 将日志输出到控制台和文件 --><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></root><!-- 可选:定义特定包或类的日志级别 --><logger name="com.example.myapp" level="debug" additivity="false"><appender-ref ref="FILE" /></logger></configuration>

代码说明

  • <configuration>: 这是 logback 配置文件的根元素。
  • <property>: 定义了一个名为 LOG_PATH 的全局属性,其值为 “logs”。可以在配置文件中使用 ${LOG_PATH} 引用这个属性。
  • <appender>: 定义了日志的输出目的地。这里我们定义了两个 appender,分别是 STDOUT(控制台输出)和 FILE(文件输出)。
    • name: Appender 的名称,可以在其他地方引用。
    • class: Appender 的实现类。
  • <encoder>: 定义了日志的格式化方式。对于控制台和文件输出,我们都指定了相同的日志格式。
    • <pattern>: 定义了日志的输出模式。例如,%d 表示日期时间,%thread 表示线程名,%-5level 表示左对齐且宽度为5的日志级别,%logger{36} 表示简短的 logger 名称,%msg 表示日志信息,%n 表示换行符。
  • <rollingPolicy>: 对于 RollingFileAppender,定义了日志滚动策略。这里使用的是基于时间的滚动策略。
    • <fileNamePattern>: 指定滚动后的日志文件命名模式。
    • <maxHistory>: 指定要保留的日志文件的最大数量。
  • <root>: 定义了应用程序的根日志记录器。所有的日志都会先经过这里。
    • level: 设置日志的最低级别。这里设置为 info,意味着只记录 info, warn, error 级别的日志。
    • <appender-ref>: 引用了之前定义的 appender,表示日志应该输出到哪些目的地。
  • <logger>: 定义了特定的 logger。这里我们为 com.example.myapp 包设置了单独的日志级别为 debug,并且关闭了加法性 (additivity="false"),这意味着该包的日志不会被传递给更高级别的 logger(如 root logger)。同时,我们将此 logger 的日志只输出到文件中。

日志级别

在 Logback 中,日志级别用于控制哪些日志消息应该被记录。Logback 支持五种标准的日志级别,从低到高排列如下:

  1. TRACE

    • 说明: 这是最低级别的日志信息,通常用于记录非常详细的运行时信息。
    • 使用场景: 适用于开发和调试阶段,当需要跟踪程序的每一步执行过程时。
    • 示例: 进入方法、变量值变化等。
  2. DEBUG

    • 说明: 用于记录调试信息,比 TRACE 级别更少但仍然详细。
    • 使用场景: 适合开发和测试环境,帮助开发者理解应用程序的行为。
    • 示例: 方法调用参数、条件判断结果等。
  3. INFO

    • 说明: 记录重要事件的信息,这些信息对于理解和追踪应用程序的正常操作是有用的。
    • 使用场景: 适用于生产环境中,提供足够的上下文来了解系统的工作情况。
    • 示例: 应用启动、配置加载、用户登录成功等。
  4. WARN

    • 说明: 用于记录可能的问题或异常情况,这些问题虽然不致命,但可能是潜在的隐患。
    • 使用场景: 适用于任何环境中,提醒开发者或运维人员注意某些非预期的情况。
    • 示例: 资源接近耗尽、尝试访问不存在的文件等。
  5. ERROR

    • 说明: 用于记录错误事件,这些事件可能会导致功能无法正常工作。
    • 使用场景: 适用于所有环境中,表示发生了严重的问题,通常需要立即关注和处理。
    • 示例: 数据库连接失败、服务调用异常等。

日志级别之间的关系

  • 在 Logback 中,如果设置了某个日志级别,则只有该级别及其以上的日志会被记录。例如,如果你将日志级别设置为 INFO,那么 TRACEDEBUG 级别的日志不会被输出,而 INFOWARNERROR 级别的日志则会正常记录。

  • 日志级别可以针对整个应用(通过根 logger 设置)或者特定的包或类(通过定义特定的 logger 来设置)。这允许你灵活地控制不同部分的日志输出。

配置日志级别

在 Logback 的配置文件中,你可以通过 <root><logger> 元素来设置日志级别。例如:

<configuration><!-- 设置根日志级别 --><root level="INFO"><appender-ref ref="STDOUT" /></root><!-- 为特定包设置不同的日志级别 --><logger name="com.example.myapp" level="DEBUG" additivity="false"><appender-ref ref="FILE" /></logger>
</configuration>

在这个例子中,根日志级别被设置为 INFO,这意味着默认情况下,所有 INFO 及以上级别的日志都会被记录。同时,com.example.myapp 包下的日志级别被单独设置为 DEBUG,并且 additivity="false" 表示这个包的日志不会传递给父 logger(即根 logger),而是直接输出到 FILE appender。

相关文章:

【Logback详解】

Logback详解 Logback 是一个用于 Java 应用的日志框架&#xff0c;它由 Log4j 的创始人 Ceki Glc 创建。Logback 分为三个模块&#xff1a;logback-core、logback-classic 和 logback-access。logback-classic 模块实现了 SLF4J (Simple Logging Facade for Java) API&#xf…...

Flume的概念和原理

一、Flume的概念 1、flume 作为 cloudera 开发的实时日志收集系统 2、flume一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据;同时&#xff0c;Flume提供对数据进行简单处理&#xff0c;并写到各种…...

初始nginx

华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...

vulnhub靶场 Empire LupinOne

使用命令查看靶机ip,访问ip arp-scan -l 使用御剑扫描一下子域名&#xff0c;但是没有获取到什么有用的信息 这是一个Apache文档&#xff0c;没有什么用 紧接着我们尝试暴力破解&#xff0c;这里推荐使用ffuf工具暴力破解目录&#xff0c;kali自带的ffuf扫描速度贼快 参数解释…...

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架&#xff0c;以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能&#xff0c;使得开发者可以轻松地定义 URL 路由规则&#xff0c;并将这些规则映射到具体的处理函数&#xff08;handler&#xff09;。以下是关于 Gin 路由的…...

使用Lodash工具库的orderby和sortby进行排序的区别

简介 _.orderBy 和 _.sortBy 是 Lodash 库中用于排序数组的两个函数。 区别 _.orderBy 允许你指定一个或多个属性来排序&#xff0c;并为每个属性指定排序方向&#xff08;升序或降序&#xff09;。默认所有值为升序排&#xff0c;指定为"desc" 降序&#xff0c…...

CSS面试题|[2024-12-24]

1.说一下CSS的盒模型 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成&#xff1a;内容content、内边距padding、边框border、外边距margin 盒模型的类型&#xff1a; 标准盒模型 margin border padding content IE盒模型 margin content&#xff08;包括border p…...

flask-admin 在modelview 视图中重写on_model_change 与after_model_change

背景&#xff1a; 当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型&#xff0c;其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。 制作&#xff1a; 1、在modelview视图下框架会通过默认视图…...

Excel粘贴复制不完整的原因以及解决方法

在数据处理和分析的过程中&#xff0c;Excel无疑是不可或缺的工具。然而&#xff0c;在使用Excel进行复制粘贴操作时&#xff0c;有时会遇到粘贴不完整的情况&#xff0c;这可能会让人感到困惑和烦恼。本文将深入探讨Excel粘贴复制不完整的原因、提供解决方案&#xff0c;并给出…...

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…...

Cocos Creator 3.8.5 正式发布,更小更快更多平台!

在 Cocos Creator 3.8.5 版本中&#xff0c;我们做了新一轮的优化。 在加载速度、代码裁剪、平台增强等多方面做了优化&#xff0c;提升了开发者体验和游戏性能。 希望能够助 Cocos 开发者们的产品更上一层楼。 一、加载速度优化 1、WASM 模块延迟加载 在早期版本中&#xff0c…...

Python中构建终端应用界面利器——Blessed模块

在现代开发中&#xff0c;命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视&#xff0c;终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI&#xff0c;可能对传统的 print() 或者 input() 函数感到不满足&#…...

Android 15 状态栏闹钟图标不显示问题修复

Android 15 状态栏闹钟图标不显示问题修复 问题描述 在 Android 15 系统中,发现即使设置了闹钟,状态栏也不会显示闹钟图标。这个问题影响了用户及时查看闹钟状态的体验。 问题分析 通过查看 SystemUI 的配置文件,发现在 frameworks/base/packages/SystemUI/res/values/conf…...

数据采集背后的效率革命:如何优化你的爬虫性能

在爬虫技术日益发展的今天&#xff0c;性能优化成为提升数据采集效率的关键。面对日益复杂的网页结构和庞大的数据量&#xff0c;高效的爬虫能够显著降低运行时间和资源成本。本文将围绕爬虫性能优化的核心方法展开讨论&#xff0c;并通过实例对比多进程、多线程以及普通爬取的…...

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况&#xff0c;一般网页和桌面是可以正常编译的&#xff0c; 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…...

《计算机组成及汇编语言原理》阅读笔记:p128-p132

《计算机组成及汇编语言原理》学习第 10 天&#xff0c;p128-p132 总结&#xff0c;总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑&#xff0c;寄存器是16位&#xff0c;数据总线(data bus)是8位&#xff0c;地址总线是20位。 (1)g…...

使用 OpenCV 在图像中添加文字

在图像处理任务中&#xff0c;我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数&#xff0c;可以很方便地在图像上绘制文本&#xff0c;支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字&#xff0c;介绍 cv2.putTe…...

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4

大家好&#xff0c;我是Q&#xff0c;邮箱&#xff1a;1042484520qq.com。 今天我们在上几讲的基础上再扩展下 Cabin Wi-Fi 的功能需求&#xff0c;讲讲如何使能 5G TCU Wi-Fi STA Bridge 模式。 参考&#xff1a; 实现某海外大型车企&#xff08;T&#xff09;Cabin Wi-Fi 需求…...

Linux系统:内核态与用户态的深层思考

背景&#xff1a; 我们学习Linux的系统调用经常会遇到一个概念&#xff1a;“内核态和用户态的切换”&#xff0c;一般人只会告诉你说这个切换代价很大&#xff0c;具体是什么情况&#xff1f;为什么需要切换&#xff1f;一定需要切换吗&#xff1f;怎么就会触发切换&#xff1…...

# 光速上手 - JPA 原生 sql DTO 投影

前言 使用 JPA 时&#xff0c;我们一般通过 Entity 进行实体类映射&#xff0c;从数据库中查询出对象。然而&#xff0c;在实际开发中&#xff0c;有时需要自定义查询结果并将其直接映射到 DTO&#xff0c;而不是实体类。这种需求可以通过 JPA 原生 SQL 查询和 DTO 投影 来实现…...

AI净界RMBG-1.4使用技巧:让抠图效果更完美的几个小方法

AI净界RMBG-1.4使用技巧&#xff1a;让抠图效果更完美的几个小方法 1. 为什么抠图效果有时不够理想&#xff1f; 即使是目前最先进的RMBG-1.4模型&#xff0c;在某些特殊情况下也可能出现边缘不够完美的情况。这通常不是模型本身的问题&#xff0c;而是由于输入图片的特性导致…...

Wan2.1-T2V-1.3B-部署

基础环境 下载模型 modelscope download Wan-AI/Wan2.1-T2V-1.3B --local_dir ./Wan2.1-T2V-1.3Bgit clone https://github.com/Wan-Video/Wan2.1.git启动 cd gradio GRADIO_SERVER_NAME"0.0.0.0" DASH_API_KEY"sk-xxx" python t2v_1.3B_singleGPU.py --pr…...

Claude Code 权限 / 安全审查调用流程图

Claude Code 权限 / 安全审查调用流程图 这份文档的目标不是“介绍功能”,而是帮助你 复刻 Claude Code 的权限判定链路 到你们自己的手机 Agent 里。 重点回答 4 个问题: 一个 action 从模型产生到真正执行,中间经过了哪些关卡? 哪些地方是 确定性规则,哪些地方会 请求…...

探索触控艺术:GestureViews 开源库深度剖析与推荐

探索触控艺术&#xff1a;GestureViews 开源库深度剖析与推荐 【免费下载链接】GestureViews ImageView and FrameLayout with gestures control and position animation 项目地址: https://gitcode.com/gh_mirrors/ge/GestureViews GestureViews 是一款专注于提供流畅手…...

Kandinsky-5.0-I2V-Lite-5s性能调优:加速推理与降低显存占用的技巧

Kandinsky-5.0-I2V-Lite-5s性能调优&#xff1a;加速推理与降低显存占用的技巧 1. 引言 如果你正在使用Kandinsky-5.0-I2V-Lite-5s进行图像到视频的生成任务&#xff0c;可能会遇到两个常见问题&#xff1a;推理速度不够快和显存占用过高。这篇文章将分享几个实用的性能调优技…...

HowTo-易连EDI-EasyLink如何实现Email收发

在数字化通信时代&#xff0c;Email作为最基础的互联网服务之一&#xff0c;其背后依赖着一套复杂的协议体系来实现邮件的发送、接收和管理。这些协议构成了电子邮件系统的技术基础&#xff0c;确保了不同邮件服务提供商之间的互操作性。在易连EDI-Easylink系统中&#xff0c;E…...

3步掌握Adobe-GenP:开源工具助力创意工作流效率提升

3步掌握Adobe-GenP&#xff1a;开源工具助力创意工作流效率提升 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在数字创意领域&#xff0c;Adobe Creative Cloud套…...

【PyJIT 3.14权威调优白皮书】:基于37个生产级微服务压测数据的6类典型劣化模式诊断图谱

第一章&#xff1a;PyJIT 3.14 JIT编译器调优核心原理与演进脉络PyJIT 3.14 是 Python 生态中首个支持多层热路径识别与跨函数内联优化的生产级 JIT 编译器&#xff0c;其核心突破在于将传统基于计数器的热点检测升级为基于执行轨迹&#xff08;Execution Trace&#xff09;的动…...

Python主流框架全解析

以下是 Python 常用框架的分类解析&#xff1a;一、Web 开发框架1. Django定位&#xff1a;全能型框架&#xff0c;内置 ORM、模板引擎、路由系统等特点&#xff1a;开箱即用&#xff08;如自带后台管理、用户认证&#xff09;遵循 MVC 设计模式&#xff08;MTV 变体&#xff0…...

ESP32S3 驱动MAX98357 I2S 音频播放:从SD卡解码MP3到实时输出的全链路解析

1. ESP32S3与MAX98357音频系统架构解析 把ESP32S3和MAX98357比作一支配合默契的乐队&#xff0c;前者是指挥家兼作曲家&#xff0c;后者则是实力派主唱。ESP32S3通过I2S协议将数字乐谱传递给MAX98357&#xff0c;这位"主唱"就能把数字符号转化为动人的旋律。这套组合…...