【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 支持五种标准的日志级别,从低到高排列如下:
-
TRACE
- 说明: 这是最低级别的日志信息,通常用于记录非常详细的运行时信息。
- 使用场景: 适用于开发和调试阶段,当需要跟踪程序的每一步执行过程时。
- 示例: 进入方法、变量值变化等。
-
DEBUG
- 说明: 用于记录调试信息,比 TRACE 级别更少但仍然详细。
- 使用场景: 适合开发和测试环境,帮助开发者理解应用程序的行为。
- 示例: 方法调用参数、条件判断结果等。
-
INFO
- 说明: 记录重要事件的信息,这些信息对于理解和追踪应用程序的正常操作是有用的。
- 使用场景: 适用于生产环境中,提供足够的上下文来了解系统的工作情况。
- 示例: 应用启动、配置加载、用户登录成功等。
-
WARN
- 说明: 用于记录可能的问题或异常情况,这些问题虽然不致命,但可能是潜在的隐患。
- 使用场景: 适用于任何环境中,提醒开发者或运维人员注意某些非预期的情况。
- 示例: 资源接近耗尽、尝试访问不存在的文件等。
-
ERROR
- 说明: 用于记录错误事件,这些事件可能会导致功能无法正常工作。
- 使用场景: 适用于所有环境中,表示发生了严重的问题,通常需要立即关注和处理。
- 示例: 数据库连接失败、服务调用异常等。
日志级别之间的关系
-
在 Logback 中,如果设置了某个日志级别,则只有该级别及其以上的日志会被记录。例如,如果你将日志级别设置为
INFO,那么TRACE和DEBUG级别的日志不会被输出,而INFO、WARN和ERROR级别的日志则会正常记录。 -
日志级别可以针对整个应用(通过根 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 应用的日志框架,它由 Log4j 的创始人 Ceki Glc 创建。Logback 分为三个模块:logback-core、logback-classic 和 logback-access。logback-classic 模块实现了 SLF4J (Simple Logging Facade for Java) API…...
Flume的概念和原理
一、Flume的概念 1、flume 作为 cloudera 开发的实时日志收集系统 2、flume一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种…...
初始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 使用御剑扫描一下子域名,但是没有获取到什么有用的信息 这是一个Apache文档,没有什么用 紧接着我们尝试暴力破解,这里推荐使用ffuf工具暴力破解目录,kali自带的ffuf扫描速度贼快 参数解释…...
6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
Gin 是一个用 Go 语言编写的 HTTP Web 框架,以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能,使得开发者可以轻松地定义 URL 路由规则,并将这些规则映射到具体的处理函数(handler)。以下是关于 Gin 路由的…...
使用Lodash工具库的orderby和sortby进行排序的区别
简介 _.orderBy 和 _.sortBy 是 Lodash 库中用于排序数组的两个函数。 区别 _.orderBy 允许你指定一个或多个属性来排序,并为每个属性指定排序方向(升序或降序)。默认所有值为升序排,指定为"desc" 降序,…...
CSS面试题|[2024-12-24]
1.说一下CSS的盒模型 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成:内容content、内边距padding、边框border、外边距margin 盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(包括border p…...
flask-admin 在modelview 视图中重写on_model_change 与after_model_change
背景: 当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型,其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。 制作: 1、在modelview视图下框架会通过默认视图…...
Excel粘贴复制不完整的原因以及解决方法
在数据处理和分析的过程中,Excel无疑是不可或缺的工具。然而,在使用Excel进行复制粘贴操作时,有时会遇到粘贴不完整的情况,这可能会让人感到困惑和烦恼。本文将深入探讨Excel粘贴复制不完整的原因、提供解决方案,并给出…...
【深度学习环境】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 版本中,我们做了新一轮的优化。 在加载速度、代码裁剪、平台增强等多方面做了优化,提升了开发者体验和游戏性能。 希望能够助 Cocos 开发者们的产品更上一层楼。 一、加载速度优化 1、WASM 模块延迟加载 在早期版本中,…...
Python中构建终端应用界面利器——Blessed模块
在现代开发中,命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视,终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI,可能对传统的 print() 或者 input() 函数感到不满足&#…...
Android 15 状态栏闹钟图标不显示问题修复
Android 15 状态栏闹钟图标不显示问题修复 问题描述 在 Android 15 系统中,发现即使设置了闹钟,状态栏也不会显示闹钟图标。这个问题影响了用户及时查看闹钟状态的体验。 问题分析 通过查看 SystemUI 的配置文件,发现在 frameworks/base/packages/SystemUI/res/values/conf…...
数据采集背后的效率革命:如何优化你的爬虫性能
在爬虫技术日益发展的今天,性能优化成为提升数据采集效率的关键。面对日益复杂的网页结构和庞大的数据量,高效的爬虫能够显著降低运行时间和资源成本。本文将围绕爬虫性能优化的核心方法展开讨论,并通过实例对比多进程、多线程以及普通爬取的…...
【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况,一般网页和桌面是可以正常编译的, 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…...
《计算机组成及汇编语言原理》阅读笔记:p128-p132
《计算机组成及汇编语言原理》学习第 10 天,p128-p132 总结,总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑,寄存器是16位,数据总线(data bus)是8位,地址总线是20位。 (1)g…...
使用 OpenCV 在图像中添加文字
在图像处理任务中,我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数,可以很方便地在图像上绘制文本,支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字,介绍 cv2.putTe…...
实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4
大家好,我是Q,邮箱:1042484520qq.com。 今天我们在上几讲的基础上再扩展下 Cabin Wi-Fi 的功能需求,讲讲如何使能 5G TCU Wi-Fi STA Bridge 模式。 参考: 实现某海外大型车企(T)Cabin Wi-Fi 需求…...
Linux系统:内核态与用户态的深层思考
背景: 我们学习Linux的系统调用经常会遇到一个概念:“内核态和用户态的切换”,一般人只会告诉你说这个切换代价很大,具体是什么情况?为什么需要切换?一定需要切换吗?怎么就会触发切换࿱…...
# 光速上手 - JPA 原生 sql DTO 投影
前言 使用 JPA 时,我们一般通过 Entity 进行实体类映射,从数据库中查询出对象。然而,在实际开发中,有时需要自定义查询结果并将其直接映射到 DTO,而不是实体类。这种需求可以通过 JPA 原生 SQL 查询和 DTO 投影 来实现…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
