Logback 基本概念

Logback 基本概念

Logback 是一个高效、灵活且广泛使用的 Java 日志框架,作为 Log4j 的后继者,由同一位作者 Ceki Gülcü 开发。Logback 拥有更快的性能、较低的内存占用,以及丰富的特性和配置选项,广泛用于 Java 项目中。Logback 被设计成模块化的系统,主要由三个模块组成:logback-corelogback-classiclogback-access

1. Logback 模块概述

Logback 由三个核心模块组成:

1.1 logback-core

logback-core 是 Logback 框架的基础模块,为其他模块提供核心功能。它定义了日志框架的通用接口、配置和结构。大多数 Logback 的功能都依赖于 logback-core 模块,这个模块是整个 Logback 体系的基石。

1.2 logback-classic

logback-classic 是与 SLF4J (Simple Logging Facade for Java) 完美集成的模块。SLF4J 提供了一组统一的 API 来使用不同的日志框架,开发者可以选择不同的具体实现,而不需要修改代码。logback-classic 模块提供了完整的日志记录功能,它的设计目的是替代 Log4j。与 SLF4J 集成的特性使 Logback 成为许多 Java 项目的首选日志框架。

1.3 logback-access

logback-access 主要用于处理 Web 应用中的 HTTP 请求日志。它集成了 Servlet 容器(如 Tomcat、Jetty)的日志系统,支持记录 HTTP 请求的详细信息。通过 logback-access,开发者可以方便地追踪和管理 Web 应用的访问日志。

2. Logback 的基本概念

Logback 的核心概念围绕着日志系统的基本结构构建,包括 Logger(日志记录器)Appender(输出器)Layout(布局)。这些组件共同协作,完成日志的生成、处理和输出。

2.1 Logger(日志记录器)

Logger 是 Logback 日志系统的核心组件,负责生成日志消息。Logger 的职责是根据日志级别(如 DEBUG、INFO、WARN、ERROR 等)记录信息。每个 Logger 由名称标识,名称通常与 Java 类的全限定名相同。

  • 根 Logger(Root Logger):Logback 中有一个默认的根 Logger,它是所有 Logger 的祖先。所有未明确指定父级的 Logger 都会继承根 Logger 的配置。根 Logger 的默认日志级别是 DEBUG,并且会输出所有低于或等于其日志级别的日志信息。

  • Logger 继承性:Logback 中的 Logger 具有继承特性。子 Logger 可以继承父 Logger 的级别和 Appender。如果一个 Logger 没有明确设置日志级别,它会继承父 Logger 的日志级别。

  • 日志级别:日志级别决定了消息的重要性,Logback 支持以下几个常用日志级别:

    • TRACE:最详细的日志信息,用于记录细粒度的调试信息。
    • DEBUG:用于调试的信息,通常是开发和调试时使用。
    • INFO:重要的运行信息,通常用于记录程序的正常操作。
    • WARN:警告信息,提示潜在的问题。
    • ERROR:错误信息,表示程序中发生了无法恢复的严重问题。

日志消息只有在其级别等于或高于 Logger 的级别时才会被记录。例如,如果 Logger 的级别设置为 INFO,则 DEBUGTRACE 级别的日志将被忽略。

2.2 Appender(输出器)

Appender 是 Logback 中负责处理日志消息输出的组件。Logger 将生成的日志消息传递给 Appender,而 Appender 决定将这些日志输出到哪里。Logback 提供了多种内置的 Appender,开发者可以灵活地配置日志的输出方式。

常见的 Appender 包括:

  • ConsoleAppender:将日志消息输出到控制台(标准输出或标准错误流)。
  • FileAppender:将日志消息写入文件。FileAppender 可以配置为滚动文件输出,即按时间或文件大小创建新的日志文件。
  • RollingFileAppender:FileAppender 的增强版本,支持日志文件的滚动机制。日志文件达到指定大小或时间时,会生成新的日志文件,旧的日志文件可以保留或删除。
  • SocketAppender:将日志消息通过网络发送到远程服务器或其他网络节点。
  • AsyncAppender:异步地将日志消息发送到 Appender,减少日志记录对应用程序性能的影响。
2.3 Layout(布局)

Layout 是 Logback 中定义日志消息格式的组件。Layout 决定了日志消息的输出样式和格式,例如是否包括时间戳、日志级别、线程名称等信息。常用的布局类包括:

  • PatternLayout:基于模式的布局类,开发者可以通过自定义的模式字符串来控制日志消息的格式。PatternLayout 是最常用的布局类型,可以通过指定占位符来格式化日志输出。例如,%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n 可以生成如下格式的日志:

    2023-01-01 12:00:00 INFO  MyClass - This is a log message
    

    其中 %d 表示日期时间,%p 表示日志级别,%c{1} 表示类名,%m 表示日志消息,%n 表示换行符。

  • HTMLLayout:以 HTML 格式输出日志信息,适用于生成可视化日志报告。

3. Logback 的配置

Logback 的配置可以通过 XML、Groovy 和 Java 编程 API 来定义。最常用的是 XML 配置文件,通常命名为 logback.xml,放置在类路径下。

3.1 基本 XML 配置示例

以下是一个简单的 logback.xml 配置示例,展示了如何定义 Logger、Appender 和 Layout:

<configuration><!-- 定义控制台输出 Appender --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 定义日志的输出格式 --><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern></layout></appender><!-- 定义文件输出 Appender --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>app.log</file><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern></layout></appender><!-- 配置根 Logger,级别为 DEBUG,输出到控制台和文件 --><root level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></root>
</configuration>

在这个配置文件中:

  • 定义了两个 Appender,一个将日志输出到控制台,另一个将日志写入到 app.log 文件中。
  • 使用 PatternLayout 定义了日志的输出格式。
  • 根 Logger 的日志级别设置为 DEBUG,并将日志输出到两个 Appender。
3.2 动态日志级别调整

Logback 支持在应用程序运行时动态地调整日志级别。可以使用 JMX 或者通过代码更改日志级别。例如,以下代码展示了如何在应用程序中动态调整某个 Logger 的日志级别:

import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.Level;public class LogLevelChanger {public static void main(String[] args) {Logger logger = (Logger) LoggerFactory.getLogger(LogLevelChanger.class);logger.setLevel(Level.WARN);  // 动态调整日志级别为 WARNlogger.info("This will not be logged");logger.warn("This will be logged");}
}

4. Logback 的高级特性

4.1 异步日志

Logback 支持异步日志,通过 AsyncAppender,可以异步地将日志信息传递给目标 Appender,从而减少日志记录对应用性能的影响。异步日志可以避免阻塞主线程,特别适用于高并发、高性能要求的场景。

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="FILE" />
</appender>
```#### 4.2 日志文件滚动
通过 `RollingFileAppender`,Logback 支持日志文件的滚动策略,例如按文件大小或按时间滚动日志文件。以下是一个基于时间滚动的配置示例:```xml
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件的命名格式 --><fileNamePattern>app.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 保留最近 30 天的日志文件 --><maxHistory>30</maxHistory></rollingPolicy><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></layout>
</appender>
4.3 过滤器

Logback 提供了丰富的日志过滤机制,可以根据消息内容、日志级别等条件过滤日志输出。例如,可以通过配置过滤器只输出 ERROR 级别的日志:

<appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>error.log</file><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><layout class="ch.qos.logback.classic.PatternLayout"><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></layout>
</appender>

结论

Logback 是一个功能强大、灵活且高效的日志框架,具备了多种日志记录、输出和管理的能力。通过模块化设计和丰富的配置选项,Logback 适用于各种 Java 应用场景,从小型项目到大型分布式系统。借助 SLF4J 的集成,Logback 不仅易于使用,还能够适应不断变化的日志需求。

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

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

相关文章

OpenAI发布多语言MMMLU数据集;火山引擎发布AI视频生成大模型豆包

&#x1f989; AI新闻 &#x1f680; OpenAI发布多语言MMMLU数据集 摘要&#xff1a;OpenAI在Hugging Face上推出了多语言大规模多任务语言理解&#xff08;MMMLU&#xff09;数据集&#xff0c;旨在评估大型语言模型在各种语言和任务中的表现。该数据集涵盖广泛的主题与学科…

记某学校小程序漏洞挖掘

前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离谱进去&#xff0c;站点里面越权泄露敏感信息&#xff0c;接管账号等漏洞&#xff01;&#xff01;&#xff01; 渗透思路 1.绕过前端 …

代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

目录 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度 226.翻转二叉树 题目 226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例1&#…

[网络] 网络层--IP协议

目录 一、IP协议 1.1 基本概念 1.2 IP协议报头 1.3 如何将报头和有效载荷分离和分用 1.4 分片与组装 1.5 如何减少分片&#xff1f; 1.6 分片和封装的具体过程 二、网段划分 2.1 再次理解IP地址 2.2 了解DHCP 2.3 网络划分方案 2.4 为什么要进行网络划分 2.5 特殊的…

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么&#xff1f; 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类&#xff1a;对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

Unity3D 小案例 像素贪吃蛇 03 蛇的碰撞

Unity3D 小案例 像素贪吃蛇 第三期 蛇的碰撞&#xff08;完结&#xff09; 像素贪吃蛇 碰撞蛇身 当蛇头碰撞到蛇身时&#xff0c;游戏应该判定为失败。 找到蛇身预制体&#xff0c;添加 Body 标签和碰撞体&#xff0c;碰撞体的大小为 0.5&#xff0c;跟蛇头和蛇身的碰撞体范…

AlDente Pro for Mac电池健康保护工具

AlDente Pro for Mac 是一款适用于 Mac 的实用电池健康保护工具。以下是它的主要特点和优势&#xff1a; 软件下载地址 一、保护电池寿命的原理 锂离子和聚合物电池&#xff08;如 Mac 笔记本中的电池&#xff09;在 30% 到 80% 之间运行时使用寿命最长。始终将电池电量保持…

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Aug 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

【VUE3.0】动手做一套像素风的前端UI组件库---Message

目录 引言自己整一个UI设计稿代码编写1. 设计信息窗口基础样式2. 设置打开和关闭的方法3. 编写实例化组件的js文件4. 看下最终效果5. 组件完整代码6. 组件调用方式 总结 引言 本教程基于前端UI样式库 NES.css 的UI设计&#xff0c;自行研究复现。欢迎大家交流优化实现方法~ 此次…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

基于数据挖掘的航空客户满意度分析预测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 航空公司致力于提供多样化的服务以满足乘客需求&#xff0c;包括但不限于提供免费无线网络、免费食物饮品、提供网上预约服务、飞机出口位置、座椅舒适度、卫生状况等&#xff0c;并希望以此提升乘…

SQL面试常见题目

SQL面试常见题目涉及多个方面&#xff0c;包括数据查询、数据操作、表的设计与优化等。以下列举一些经典的SQL面试题目&#xff0c;并附上解析答案&#xff1a; 1. 查询一张表中重复的数据 题目&#xff1a; 给定一个表 employees&#xff0c;包含 id, name, salary 列。如何…

SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security 登录验证模式 传统的验证登录模式 公开页面&#xff1a;输入url就可以直接访问授权页面&#xff1a;登录之后才可以访问 Jwt验证模式 容易实现跨域不需要在服务器端存储 对比于传统模式将所有的sessionId换成jwt token access token refresh token 过…

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

关于预处理的一系列问题

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 2. #define定义常量 #define name stuff 如果定义的 stuff过⻓&#xff0c;可以分成⼏⾏写&#xff0c;除了最后⼀⾏外&#xff0c;每⾏的后⾯都加⼀个反…

win10下使用docker、k8s部署java应用

在上一篇文章 Windows10上Docker和Kubernetes的安装 中&#xff0c;已经介绍了在 Windows10上安装Docker和Kubernetes &#xff0c;有了这个环境基础之后&#xff0c;就可以用来部署服务了 在项目目录下新建Dockfile文件&#xff0c;内容如下&#xff08;请根据实际情况调整&am…

前端——阿里图标的使用

阿里图标 将小图标定义成字体&#xff0c;通过引入字体的方式来展示这些图标 1.打开阿里图标库 https://www.iconfont.cn/ 2.登录 / 注册一个账号 3.选中你需要使用的图标 并且把它加入购物车 4.全部选择完之后 点击右上角 购物车 然后下载代码 5.解压后你下载的文…