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

目录

  • 1 日志技术概述
  • 2 日志技术体系
  • 3 Logback 日志框架
    • 3.1 Logback 概述
    • 3.2 Logback 快速入门
    • 3.3 Logback 配置详解
      • 3.3.1 输出位置与格式设置
      • 3.3.2 日志级别设置

1 日志技术概述


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

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

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

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

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

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

日志与输出语句的区别:

Java SE 学习笔记(十三)—— 日志框架_第1张图片

2 日志技术体系


日志体系结构:

Java SE 学习笔记(十三)—— 日志框架_第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  ");

项目目录结构:

Java SE 学习笔记(十三)—— 日志框架_第3张图片

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文件中设置的日志文件存放路径中会保存上述程序的日志内容

Java SE 学习笔记(十三)—— 日志框架_第4张图片

3.3 Logback 配置详解

3.3.1 输出位置与格式设置


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

  • 通过配置文件中的标签可以设置输出位置和日志信息的详细格式
  • 通常可以设置2个日志输出位置:一个是控制台,一个是系统文件中

<configuration>
    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        
        <target>System.outtarget>
        <encoder>
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%npattern>
        encoder>
    appender>

    
    <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%npattern>
            <charset>utf-8charset>
        encoder>
        
        <file>D:/StudyTools/Idea/logs/data.logfile>
        
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            
            <fileNamePattern>D:/StudyTools/Idea/logs/data-%d{yyyy-MMdd}.log%i.gzfileNamePattern>
            
            <maxFileSize>1MBmaxFileSize>
        rollingPolicy>
    appender>

    
    
    <root level="ALL">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    root>
configuration>

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

3.3.2 日志级别设置


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

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

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

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

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

具体是在标签的 level 属性中设置日志级别

Java SE 学习笔记(十三)—— 日志框架_第5张图片

你可能感兴趣的:(Java,java,学习,开发语言,笔记)