Java SE 学习笔记(十三)—— 日志框架

1 日志技术概述


当我们想清楚的知道系统的一些运行情况,比如:

  • 希望系统能记住某些数据是被谁操作的,比如被谁删除了?
  • 想分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?
  • 当系统在开发或者上线后出现了 bug ,崩溃了,该通过什么去分析、定位 bug

之前我们会采用输出语句的方式,但是该方式会有一些弊端:

  • 想取消记录的信息需要修改代码才可以完成
  • 信息只能展示在控制台,不能将其记录到其他的位置(文件,数据库)

采用日志的方式即可避免上述弊端

  • 用来记录程序运行过程中的信息,并可以进行永久存储
  • 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)
  • 可以随时以开关的形式控制是日志的记录和取消,无需侵入到源代码中去进行修改。

日志与输出语句的区别:

在这里插入图片描述

2 日志技术体系


日志体系结构:

在这里插入图片描述

日志接口:一些规范,提供给日志的实现框架设计的标准。

日志框架:牛人或者第三方公司已经做好的实现代码,后来者直接可以拿去使用。

因为对 Commons Logging 接口不满意,有人就搞了 SLF4J 。因为对 Log4j 的性能不满意,有人就搞了 LogbackLogback 是基于 SLF4J 的日志规范实现的框架。

3 Logback 日志框架

3.1 Logback 概述


Logback 是由 Log4j 创始人设计的另一个开源日志组件,性能比 Log4j 要好, Logback 是基于 SLF4J 的日志规范实现的框架。

Logback官方网站

Logback 日志框架分为以下模块:

  • logback-core : 该模块为其他两个模块提供基础代码。 (必须有)
  • logback-classic :是 Log4j 的一个改良版本,完整实现了 SLF4J API 的模块。(必须有)
  • logback-access:该模块与 TomcatJettyServlet 容器集成,以提供 HTTP 访问日志功能(可选模块)

要想使用 Logback 日志框架,至少需要在项目中整合如下三个模块:

  • slf4j-api :日志接口
  • logback-core :基础模块
  • logback-classic :功能模块,它完整实现了 SLF4J API

Java日志的三大jar包以及配置文件的下载流程

3.2 Logback 快速入门


需求:使用 Logback 日志框架,记录系统的运行信息。

实现步骤:

  1. 导入 Logback 框架到项目中去。在项目下新建文件夹 lib ,导入 Logbackjar 包到该文件夹下

在这里插入图片描述

  1. 将存放 jar 文件的 lib 文件夹添加到项目依赖库中去(Add as Library… )。

  2. Logback 的核心配置文件 logback.xml 直接拷贝到 src 目录下(必须是src 下)。

  3. 创建 Logback 框架提供的 Logger 日志对象,后续使用其方法记录系统的日志信息

public static final Logger LOGGER = LoggerFactory.getLogger("类名.class  ");

项目目录结构:

在这里插入图片描述

Test.java 代码实现:

/*
    目标:快速搭建logback日志框架,记录程序的执行情况到控制台、文件
 */

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

public class Test {
    // 创建logback日志对象
    public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");

    public static void main(String[] args) {
        try {
            LOGGER.debug("main方法执行了");
            LOGGER.info("开始记录第二行日志");
            int a = 10;
            int b = 0;
            LOGGER.trace("a=" + a);
            LOGGER.trace("b=" + b);
            System.out.println(a / b);
        } catch (Exception e) {
            LOGGER.error("功能异常" + e);
        }
    }
}

同时,在logback.xml文件中设置的日志文件存放路径中会保存上述程序的日志内容

在这里插入图片描述

3.3 Logback 配置详解

3.3.1 输出位置与格式设置


logback 日志系统的特性都是通过核心配置文件logback.xml控制的

  • 通过配置文件中的<appender>标签可以设置输出位置和日志信息的详细格式
  • 通常可以设置2个日志输出位置:一个是控制台,一个是系统文件中
<?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>D:/StudyTools/Idea/logs/data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>D:/StudyTools/Idea/logs/data-%d{yyyy-MMdd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--

    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
   , 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <!--如果这里不配置关联打印日志,改位置则不会记录日志-->
    <root level="ALL">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
</configuration>

日志文件超过1MB会自动拆分,不知道为啥实现不了

3.3.2 日志级别设置


如果系统上线后,我们只想记录一些错误的日志信息或者是不想记录了,怎么办?

  • 可以通过设置日志的输出级别来控制哪些日志信息输出或者不输出

日志级别程度依次是:TRACE<DEBUG<INFO<WARN<ERROR,默认的级别是 debug(忽略大小写)。

  • 用于控制系统中哪些日志级别是可以输出的,只输出不低于设定级别的日志信息

ALLOFF 分别是打开全部的日志信息、关闭全部的日志信息

具体是在<root level="INFO">标签的 level 属性中设置日志级别

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值