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

Day 20:日志管理与 Logback

理论知识

  1. 为什么需要日志?

    • 调试与排错:快速定位系统问题。
    • 运行监控:记录系统运行状态,便于实时分析。
    • 安全审计:提供操作记录,满足合规需求。
    • 性能优化:通过分析日志发现瓶颈,优化性能。
  2. 常见日志框架

    • SLF4J:统一日志接口,支持多种日志实现(如 Logback、Log4j)。
    • Logback:Spring Boot 默认日志框架,功能强大、配置灵活。
    • Log4j:早期常用日志框架,现多被 Logback 替代。
  3. Logback 配置文件

    • 日志级别
      • TRACE:记录最详细的信息,调试使用。
      • DEBUG:调试相关信息,开发时使用。
      • INFO:系统运行的普通信息。
      • WARN:可能导致问题的警告信息。
      • ERROR:严重错误信息。
    • 输出格式:通过 %d(时间)、%p(日志级别)、%t(线程)、%m(日志消息)等定义格式。
    • 文件分割策略
      • 按时间分割:<rollingPolicy class="TimeBasedRollingPolicy">
      • 按文件大小分割:<rollingPolicy  class="SizeBasedTriggeringPolicy">

实践操作

1. 配置 Spring Boot 项目日志

Spring Boot 默认使用 Logback,可以通过配置文件 application.ymllogback-spring.xml 定制日志行为。

1. 配置 logback-spring.xml 文件 
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 定义日志格式 -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" />
    <property name="LOG_PATH" value="logs" />

    <!-- 控制台日志输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 文件日志输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天生成一个日志文件 -->
            <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory> <!-- 保存最近 30 天的日志 -->
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志级别配置 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

    <!-- 设置某些包的日志级别 -->
    <logger name="com.example" level="DEBUG" />
</configuration>
2. 设置 application.yml 文件
logging:
  level:
    root: info
    com.example: debug
  file:
    name: logs/app.log
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
3. 示例代码:日志输出
package com.example.logging;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LoggingApplication {

    private static final Logger logger = LoggerFactory.getLogger(LoggingApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(LoggingApplication.class, args);

        logger.trace("This is a TRACE log");
        logger.debug("This is a DEBUG log");
        logger.info("This is an INFO log");
        logger.warn("This is a WARN log");
        logger.error("This is an ERROR log");
    }
}
说明
  1. 日志级别控制:将开发阶段设置为 DEBUG,生产阶段设置为 INFO 或更高。
  2. 文件分割策略:按时间分割适合长期运行的系统,按大小分割适合高频写入的日志。
  3. 日志监控与分析:结合 ELK(Elasticsearch、Logstash、Kibana)或 Grafana 实现日志可视化管理。

总结 

本篇文章围绕日志管理与 Logback 框架,详细讲解了日志的重要性及其在 Java 开发中的应用。通过理论知识部分,了解了常见日志框架(如 SLF4J 和 Logback)的优点以及 Logback 的配置方法,包括日志级别、输出格式和文件分割策略。实践操作中,通过配置 logback-spring.xml 文件和编写示例代码,展示了如何在 Spring Boot 项目中高效管理日志输出。特别是针对日志的分级和分割策略的实现,为工作中的日志监控与问题排查提供了重要参考。


http://www.kler.cn/a/465351.html

相关文章:

  • 约瑟夫问题
  • C# 设计模式(结构型模式):桥接模式
  • Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
  • 远程主机执行脚本1、无脚本内容外协。
  • 【网络】ARP表、MAC表、路由表
  • 昆仑万维大数据面试题及参考答案
  • Go语言在实际项目中的应用:从RESTful API到日志监控 (十四)
  • wordpress右侧浮动咨询台插件
  • 频域滤波为什么使用psf2otf函数?
  • 大语言模型(LLMs)数学推理的经验技巧【思维链CoT的应用方法】
  • 【JavaWeb后端学习笔记】MySQL的常用函数(字符串函数,数值函数,日期函数,流程函数)
  • Java学习-Redis
  • Next.js 实战 (六):如何实现文件本地上传
  • 目录中只有一个子目录时把子目录移动到父目录
  • OpenCV的人脸检测模型FaceDetectorYN
  • 25考研王道数据结构课后习题笔记
  • 2025三掌柜赠书活动第一期:动手学深度学习(PyTorch版)
  • 什么是实体完整性约束?
  • CSS系列(43)-- Anchor Positioning详解
  • Python图形界面(GUI)Tkinter笔记(二十二):Listbox列表项目功能控件
  • 在C#中获取程序的命令行参数
  • Spring MVC 的@GetMapping和@PostMapping和@PutMapping
  • Maven项目集成SQL Server的完整教程:从驱动配置到封装优化
  • Unity小白工作心得(无限记录)
  • uniapp中使用ruoyiPlus中的加密使用(crypto-js)
  • es 3期 第19节-运用异步机制执行重度查询