首页 > 其他分享 >深入浅出:什么是日志技术?如何在项目中使用?

深入浅出:什么是日志技术?如何在项目中使用?

时间:2024-09-08 14:25:03浏览次数:9  
标签:框架 记录 Logback 深入浅出 日志 logback LOGGER 项目

深入浅出:什么是日志技术?如何在项目中使用?

在软件开发中,日志技术就像一本记录系统“点点滴滴”的日记。系统运行时,它记录下关键事件——正常操作、异常情况都不会遗漏。日志不仅是开发人员分析系统行为的利器,还可以在项目出现问题时,帮助我们快速找到问题根源。那么,如何让系统“记日记”,又如何巧妙使用这些日志呢?接下来,我们将详细探讨日志技术的方方面面。


为什么需要日志?

想象以下几个场景:

  • 你希望记录操作行为:谁删除了某个数据?这类操作行为非常重要,往往需要进行溯源。
  • 你需要分析用户行为:用户的操作习惯如何?通过日志数据,我们可以进行用户行为分析。
  • 系统发生了错误:当系统崩溃或发生Bug时,你需要快速定位问题所在,日志可以提供重要线索。

日志就像一个细致的侦探,记录了所有的操作,帮助我们追踪、分析和优化系统行为。那问题来了:日志应该如何记录?怎样才能方便、有效地管理这些记录呢?


日志的“前世今生”

初级阶段:System.out.println() 记录日志

在初学编程时,我们大多依赖输出语句来记录日志,例如通过 System.out.println() 输出到控制台。然而,这种方式存在诸多问题:

public class App {
    public static void main(String[] args) {
        try {
            int result = Integer.parseInt("人民万岁");
            System.out.println("转换结果为: " + result);
        } catch (NumberFormatException e) {
            System.out.println("输入的数据有误,请输入一个有效的数字");
        }
    }
}

问题分析:

  1. 日志易丢失:当关闭控制台后,日志记录无法保存。
  2. 生产环境缺乏控制台:一旦项目上线,我们无法通过控制台查看日志。
  3. 难以灵活管理:如果要禁用日志输出,必须修改代码并重新发布应用,效率低下。

显然,输出语句虽然简单,但在实际开发中并不适用。因此,我们需要一种更加专业且高效的方式来管理日志,这就要引入日志框架


什么是日志框架?

日志框架的核心理念

日志框架是一种用于管理日志记录的工具。它能帮助开发者灵活地控制日志的记录、存储和输出。相比于直接用输出语句,日志框架具备以下特点:

  • 可定制的日志输出:支持将日志记录到不同的目标位置,如控制台、文件、数据库等。
  • 日志级别管理:通过设定日志的级别,框架能够决定哪些日志需要记录,哪些可以忽略。
  • 可扩展性强:日志框架支持丰富的配置,能够处理复杂的日志需求。

目前常用的日志框架有:

  • Logback
  • Log4j
  • SLF4J(Simple Logging Facade for Java)

日志接口与实现框架的关系

日志框架通常由日志接口日志实现组成:

  • 日志接口:为不同的日志实现提供统一标准,使得我们可以通过一个接口灵活地切换日志实现。
  • 日志实现:具体执行日志记录任务的框架。

例如,SLF4J 是一套日志接口,而 Logback 是它的具体实现框架。


Logback:现代化日志框架的优选

Logback 是当前广泛使用的日志框架之一,它是SLF4J接口的默认实现,并且相比于 Log4j,Logback 具有更好的性能和灵活性。Logback的优点包括:

  1. 高性能:Logback 在日志处理上的效率优于 Log4j,更适合高负载环境。
  2. 灵活的配置:通过简单的 XML 配置文件,Logback 能够轻松设置日志的输出位置、格式及级别。
  3. 日志管理功能强大:它支持日志文件的定期拆分、压缩和归档,便于长期存储和管理。

Logback 的模块组成

Logback 主要由以下三个模块组成:

  1. logback-core:基础模块,其他模块的依赖。
  2. logback-classic:完整实现了 SLF4J API 的模块,负责日志记录的核心功能。
  3. logback-access:与 Servlet 容器(如 Tomcat)集成,用于记录 HTTP 访问日志。(可选)

日志框架的配置和使用

1. 添加依赖

如果你使用 Maven 项目,你需要通过以下方式引入 Logback 和 SLF4J 依赖:

<dependencies>
    <!-- SLF4J 日志接口 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.36</version>
    </dependency>
    
    <!-- Logback 核心模块 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
</dependencies>

2. 配置核心日志文件 logback.xml

logback.xml公司里面会给,收集一下,不需要自己写,也不要求记忆,

logback.xml 是 Logback 日志框架的核心配置文件,通过它你可以控制日志的输出位置、格式等。例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
                %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <!-- 指定字符编码 -->
            <charset>utf-8</charset>
        </encoder>
        <!--日志输出路径-->
        <file>E:/ASUSPro554U/BiWu-JavaSE-Projects/ITCQ1024/src/logback-test.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/log/itheima-data-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--
        1、控制日志的输出情况:如,开启日志,取消日志
    -->
    <root level="debug">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
</configuration>

3. 在代码中使用日志

package com.itcq.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App {

    // 创建Logger日志对象,用于记录程序执行的日志信息
    // 使用了logback-test作为Logger名称,便于识别日志来源
    public static final Logger LOGGER = LoggerFactory.getLogger("logback-test");

    public static void main(String[] args) {
        try {
            // 记录方法开始执行的日志信息
            LOGGER.info("方法开始执行~~~");

            // 调用divisionMethod方法,传入10和0进行除法运算
            double result = divisionMethod(10, 0);

            // 如果方法正常执行,记录成功信息
            LOGGER.info("方法执行成功,结果为:" + result);
        } catch (Exception e) {
            // 捕获异常并记录错误日志
            LOGGER.error("方法出现了异常,错误信息:" + e.getMessage());
        }
    }

    /**
     * 执行两个整数的除法运算
     * @param a 除数
     * @param b 被除数
     * @return 返回除法结果
     */
    private static double divisionMethod(int a, int b) {
        // 记录调试信息,显示传入参数a和b的值
        LOGGER.debug("参数a = " +

 a);
        LOGGER.debug("参数b = " + b);

        // 进行除法运算,b为0时会抛出ArithmeticException
        double result = a / b;

        // 记录计算结果的日志信息
        LOGGER.info("计算结果是:" + result);

        // 返回除法运算的结果
        return result;
    }
}

代码解析及日志说明:

  1. 日志对象创建:

    • Logger LOGGER = LoggerFactory.getLogger("logback-test");:这是通过SLF4J的LoggerFactory创建的日志对象,"logback-test"是日志名称,方便后续区分来源。
  2. 日志级别:

    • LOGGER.info:表示记录重要的系统执行信息,例如方法的开始和成功执行的状态。
    • LOGGER.debug:记录调试信息,通常是显示传入的参数和一些内部的细节,便于调试。
    • LOGGER.error:记录错误日志,用于捕捉异常,帮助开发人员快速定位问题。
  3. 日志捕捉异常:

    • catch块中捕捉异常并输出错误日志:LOGGER.error("方法出现了异常")。该部分是为了处理运行时的异常,特别是divisionMethod中除以0的错误。
  4. 除法方法(divisionMethod):

    • 该方法执行除法运算,并通过日志记录传入参数及结果。需要注意的是,当除数为0时会抛出ArithmeticException
  5. 异常处理:

    • try-catch结构用于捕捉divisionMethod中的除数为0时的异常,并记录错误日志,避免程序崩溃。

4. 日志的拆分与归档

通过 Logback 的配置文件,你可以轻松指定日志文件的拆分和压缩规则。例如,通过以下配置,日志文件每超过 1MB 就会被拆分为一个新的文件:

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>logs/app.%i.log.gz</fileNamePattern>
        <maxFileSize>1MB</maxFileSize>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

日志级别的妙用

日志信息有不同的级别,通过设定日志级别,你可以控制系统中哪些信息会被记录,哪些会被忽略。常见的日志级别从低到高依次为:

  1. TRACE:追踪信息,用于记录系统的详细运行轨迹。
  2. DEBUG:调试信息,用于开发过程中的问题排查。
  3. INFO:普通信息,用于记录系统正常运行时的关键步骤。
  4. WARN:警告信息,提示潜在问题但不影响系统运行。
  5. ERROR:错误信息,用于记录系统发生的重大故障。

通过日志级别的设置,你可以避免记录不必要的调试信息。例如,在生产环境中,通常会设置日志级别为 INFOERROR,这样可以减少日志量,并更快定位问题。

<root level="error">
    <appender-ref ref="console"/>
    <appender-ref ref="file"/>
</root>

总结

日志技术是软件开发中的一项核心技能。通过使用 Logback 日志框架,你可以灵活、高效地管理日志,帮助开发者追踪系统问题、分析系统行为,甚至优化项目性能。无论是系统调试还是生产环境的监控,日志技术都是不可或缺的工具。掌握日志技术,不仅能提高开发效率,还能为系统稳定运行提供强有力的保障。

标签:框架,记录,Logback,深入浅出,日志,logback,LOGGER,项目
From: https://www.cnblogs.com/itcq1024/p/18402838

相关文章

  • 【免费帮选题必过】2025年最新最全毕业设计项目推荐,建议收藏,涉及到计算机专业,大数据专
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • Java大学生实战项目-基于SpringBoot+vue 的民宿在线预定平台
    博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w+、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • Java大学生实战项目- 基于SpringBoot+vue 的在线远程考试系统
    博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w+、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • STM32L431RC 光照度+温湿度+电机+ESP8266+腾讯云+CSDN 项目
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)STM32L431RC光照度+温湿度+电机+ESP8266+腾讯云+CSDN项目介绍1.项目概述......
  • Java毕设项目II基于Spring Boot+Vue的失物招领平台
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言在快节奏的生活中,物品遗失与寻回成为了人......
  • 阅读周·深入浅出的Node.js | 异步I/O、事件驱动和单线程,Node基调三元素了解一下
    背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效。已读完书籍:《架构简洁之道》。当前阅读......
  • 新斗音低价全自动下单挂机项目
    项目概述本项目旨在开发一款工具,用于自动化地分析和参与电商平台上的促销活动。该工具可以帮助用户高效地识别优惠商品,并进行数据分析以优化购买策略。核心功能数据采集:自动采集电商平台上的促销商品信息。智能下单:根据用户设定的条件,自动下单购买符合条件的商品。订......
  • 商品浏览全自动挂机撸金项目
    项目概述本项目旨在开发一款工具,用于自动化地浏览电商平台上的商品,核心功能自动化浏览:工具能够自动浏览商品页面,模拟真实用户的浏览行为。数据分析:自动记录浏览数据,包括浏览量、停留时间等。工具要求设备需求:普通电脑,脚本作为浏览器插件使用。账号需求:需要有效的淘......
  • 新斗音低价全自动下单挂机项目
    项目概述本项目旨在开发一款工具,用于自动化地分析和参与电商平台上的促销活动。该工具可以帮助用户高效地识别优惠商品,并进行数据分析以优化购买策略。核心功能数据采集:自动采集电商平台上的促销商品信息。智能下单:根据用户设定的条件,自动下单购买符合条件的商品。订......
  • 日志服务管理
    系统日志管理sysklogd系统日志服务在CentOS5以及之前的发行版中,其采用的sysklogd服务来记录和管理系统日志的。sysklogd服务有两个模块:klogd:用于记录linuxkernel相关的日志syslogd:用于记录用户空间应用日志rsyslog系统日志服务RSYSLOGistherocket-fa......