当前位置: 首页 > 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。

http://www.lryc.cn/news/512219.html

相关文章:

  • Flume的概念和原理
  • 初始nginx
  • vulnhub靶场 Empire LupinOne
  • 6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
  • 使用Lodash工具库的orderby和sortby进行排序的区别
  • CSS面试题|[2024-12-24]
  • flask-admin 在modelview 视图中重写on_model_change 与after_model_change
  • Excel粘贴复制不完整的原因以及解决方法
  • 【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)
  • Cocos Creator 3.8.5 正式发布,更小更快更多平台!
  • Python中构建终端应用界面利器——Blessed模块
  • Android 15 状态栏闹钟图标不显示问题修复
  • 数据采集背后的效率革命:如何优化你的爬虫性能
  • 【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
  • 《计算机组成及汇编语言原理》阅读笔记:p128-p132
  • 使用 OpenCV 在图像中添加文字
  • 实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4
  • Linux系统:内核态与用户态的深层思考
  • # 光速上手 - JPA 原生 sql DTO 投影
  • ASP.NET Web应用程序出现Maximum request length exceeded报错
  • HTML——16.相对路径
  • windows 默认的消息ID有那些---我与大模型对话
  • CSV vs 数据库:爬虫数据存储的最佳选择是什么
  • 编译原理学习笔记——CH7-Runtime Environments运行时环境
  • 机器学习DAY7: 特征工程和特征选择(数据预处理)(完)
  • vue3动态加载组件
  • 12.29 redis缓存一致性
  • SqlSugar配置连接达梦数据库集群
  • 评分模型在路网通勤习惯分析中的应用——提出问题(1)
  • 使用 OpenCV 绘制线条和矩形