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,一经查实,立即删除!

相关文章

【C/C++语言系列】实现单例模式

1.单例模式概念 定义&#xff1a;单例模式是一种常见的设计模式&#xff0c;它可以保证系统中一个类只有一个实例&#xff0c;而且该实例易于外界访问&#xff08;一个类一个对象&#xff0c;共享这个对象&#xff09;。 条件&#xff1a; 只有1个对象易于外界访问共享这个对…

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

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

C++解压及压缩(window或linux下编译、使用libarchive)

C++解压及压缩(window或linux下编译、使用libarchive) 一、linux 系统 - 压缩解压1.1 基础知识1.1.1. 安装 libarchive1.1.2. 包含头文件1.1.3. 创建和使用 Archive 对象1.1.4. 打开和关闭归档1.1.5. 读取和写入归档条目1.1.6. 清理资源1.1.7. 编译和链接1.1.8. 错误处理1.2 …

记某学校小程序漏洞挖掘

前言&#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算法加密。 算法内部的具体实现…

选择租用徐州服务器机柜的作用有哪些?

企业为了线上网络业务&#xff0c;通常都会选择租用服务器来确保网络的稳定性&#xff0c;企业选择服务器租用和托管业务后&#xff0c;同时也需要租用服务器机柜来进行放置所使用的服务器&#xff0c;对于机柜企业可以选择租用徐州机柜&#xff0c;下面就来聊一下选择租用徐州…

LeetCode: 2207. 字符串中最多数目的子序列 一次遍历数组,时间复杂度O(n)

2207. 字符串中最多数目的子序列 today 2207 字符串中最多数目的子序列 题目描述 你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符&#xff0c;这个插…

【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 …

ubuntu20.04编译安装opencv-4.9.0的cuda版本

NVIDIA显卡驱动550.107.02&#xff08;4060显卡&#xff1a;8.9&#xff0c;3060显卡&#xff1a;8.6&#xff09;cuda&#xff1a;12.1cudnn&#xff1a;8.9.7opencv4.9.0&#xff0c;opencv_contrib_4.9.0 前三个安装略过&#xff01; 主要编译安装opencv4.9.0: 下载openc…

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

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

使用数据泵(Data Pump)迁移Oracle数据库数据

目的 将一个oracle数据库实例数据复制给另一个实例 注意事项 sqlplus&#xff08;即在本机linux环境下执行sql&#xff09;、expdp、impdp等命令一般需要切换到oracle用户才能执行 如果你当前是linux的root用户&#xff0c;请切换用户 su - oracle //一般在oracle账号下才能…

node节点使用:

节点&#xff1a; 1.返回父节点 parentNode let par li1.parentNodepar.style.border 1px solid red 2.获取所有子节点的集合 childNodes let nodes par.childNodes 3.第一个子节点 firstChild let frist par.firstChild 4.最后一个 lastChild let last par.lastC…

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

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

service 命令:管理系统服务

一、命令简介 ​service​ 命令是 Linux 系统中用于管理服务的工具&#xff0c;它通过调用位于 /etc/init.d/ ​目录下的服务脚本&#xff0c;来启动、停止、重启、查询状态等操作系统服务&#xff08;守护进程&#xff09;。service ​命令是一个便捷的 shell 脚本&#xff0…

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;自行研究复现。欢迎大家交流优化实现方法~ 此次…

深度学习(3):Tensor和Optimizer

文章目录 是什么Tensor1. Tensor 的基本概念2. 自动求导&#xff08;Autograd&#xff09;机制3. requires_grad 属性4. .data 和 .item()5. 梯度清零 Optimizer 是什么 Tensor&#xff08;张量&#xff09;&#xff1a;在 PyTorch 中&#xff0c;Tensor 是一种多维数组&#…