JAVA日志技术 & Logback

简介: 为什么需要记录日志?我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着至关重要的作用。......

目录

前言

一、日志概括

1.了解日志框架

2.了解logback

二、使用logback

1.导入jar包

2.配置文件XML

3.使用logback

4.日志级别


前言

为什么需要记录日志?我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着至关重要的作用

一、日志概括

1.了解日志框架

JAVA在早期的日志都是通过System.out.println()进行记录的,但是这种方式不便于管理,所以apache最先开发了首个日志框架:log4j; 为日志框架奠定了基础;

日志框架出现的历史顺序为 :

log4j → JUL → JCL → SLF4J → logback → log4j2

本章我们学习 logback ;目前比较火的框架,spring2.0默认使用logback日志

2.了解logback

Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j好

Logback是SpringBoot内置的日志处理框架,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。官方文档:http://logback.qos.ch/manual/

Logback主要分为三个技术模块:

    1. Logback-core:为其他两个模块奠定了基础,必须有
    2. Logback-classic:它是log4j的一个改良版本,同时完整实现了slf4j API
    3. Logback-access:与Tomcat 和 Jetty等Servlet容器集合,以提供HTTP访问日志功能

    二、使用logback

    1.导入jar包

    首先建一个名为lib的目录,把jar包导入进去

    image.gif

    全选我们的jar包,然后右键,选择Add as library . . .  

    image.gif

    2.配置文件XML

    网上下载logback.xml文件,将核心配置文件logback.xml拷贝到src目录下(必须是src)

    或者在src目录下创建xml文件,直接复制如下

    <?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>C:/code/itheima-data.log</file>
            <!--指定日志文件拆分和压缩规则-->
            <rollingPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--通过指定压缩文件名称,来确定分割文件方式-->
                <fileNamePattern>C:/code/itheima-data2-%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>

    image.gif

    3.使用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;
            System.out.println(a/b);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("功能异常" + e);
        }
    }

    image.gif

    注意xml文件中

    输出到控制台配置标志:

    image.gif编辑

    输出到系统文件配置标志:

    image.gif编辑

    文件输出路径:

            <file>C:/code/itheima-data.log</file>

    到该路径打开文件后:

    image.gif

    4.日志级别

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

    TRACE < DEBUG < INFO < WARN < ERROR

    ALL:打开全部日志信息

    OFF:关闭全部日志信息  

    默认级别是debug(大小写不区分)  

    image.gif

      • TRACE 级别最小,打印信息最为详细,一般不会使用。
      • DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息
      • INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
      • WARN  表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
      • ERROR 级别最大,打印信息最为简略
      相关实践学习
      日志服务之使用Nginx模式采集日志
      本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
      目录
      相关文章
      |
      1天前
      |
      供应链 Java API
      Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
      【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
      |
      2天前
      |
      Java 关系型数据库 MySQL
      【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
      【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
      |
      7天前
      |
      缓存 Java 编译器
      第一章 Java线程池技术应用
      第一章 Java线程池技术应用
      10 0
      |
      7天前
      |
      运维 监控 前端开发
      [SpringAop + Logback +MDC] 现网必备全链路日志追踪
      [SpringAop + Logback +MDC] 现网必备全链路日志追踪
      |
      7天前
      |
      负载均衡 Java 数据库连接
      Java从入门到精通:4.2.2学习新技术与框架——不断扩展自己的知识面,跟上技术的发展趋势
      Java从入门到精通:4.2.2学习新技术与框架——不断扩展自己的知识面,跟上技术的发展趋势
      |
      7天前
      |
      SQL Java 数据库连接
      Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
      Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
      |
      7天前
      |
      SQL Java 数据库连接
      Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
      ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
      |
      7天前
      |
      消息中间件 存储 Java
      Java从入门到精通:3.1.1掌握EJB、JPA、JMS等Java EE核心技术
      Java从入门到精通:3.1.1掌握EJB、JPA、JMS等Java EE核心技术
      |
      7天前
      |
      设计模式 存储 前端开发
      Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
      Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
      |
      7天前
      |
      Java API
      Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
      Java从入门到精通:2.1.5深入学习Java核心技术之文件操作