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

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

目录

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

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 属性中设置日志级别

在这里插入图片描述


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

相关文章:

  • Springboot之拦截器Interceptor
  • asyncio教程
  • 【目标检测】非极大值抑制NMS的原理与实现
  • C/C++输出整数 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • 记录nvm use node.js版本失败,出现报错: exit status 1: ��û���㹻��Ȩ��ִ�д˲�����
  • 群面的技巧
  • 如何实现两栏布局?这篇文章告诉你所有的细节!
  • influxdb基本使用及其源码解析
  • Ubuntu 安装 npm 和 node
  • RabbitMQ原理(四):MQ的可靠性
  • 【linux】SourceForge 开源软件开发平台和仓库
  • 云游数智农业世界,体验北斗时空智能
  • 什么是web3.0?
  • 基于STM32+物联网设计的货车重量检测系统(OneNet)
  • 如何通过企业培训考试系统实现持续学习和发展
  • RabbitMQ的交换机(原理及代码实现)
  • PPT文档图片设计素材资源下载站模板源码/织梦内核(带用户中心+VIP充值系统+安装教程)
  • 【凡人修仙传】定档,四女神出场,韩立遭极阴岛陷阱,蛮胡子亮相
  • kvm webvirtcloud 如何添加直通物理机的 USB 启动U盘
  • Kotlin(八) 数据类、单例