JAVA日志技术 & Logback

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 为什么需要记录日志?我们不可能实时的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日志并进行多维度分析。
      目录
      相关文章
      |
      12天前
      |
      XML 安全 Java
      【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
      本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
      121 30
      【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
      |
      10天前
      |
      Java 中间件
      SpringBoot入门(6)- 添加Logback日志
      SpringBoot入门(6)- 添加Logback日志
      44 5
      |
      1月前
      |
      存储 运维 监控
      Elasticsearch Serverless 高性价比智能日志分析关键技术解读
      本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
      Elasticsearch Serverless 高性价比智能日志分析关键技术解读
      |
      12天前
      |
      JSON 前端开发 JavaScript
      java-ajax技术详解!!!
      本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
      27 1
      |
      20天前
      |
      SQL 监控 Java
      技术前沿:Java连接池技术的最新发展与应用
      本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
      29 7
      |
      22天前
      |
      移动开发 前端开发 Java
      过时的Java技术盘点:避免在这些领域浪费时间
      【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
      50 7
      |
      17天前
      |
      SQL Java 数据库连接
      在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
      在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
      31 3
      |
      18天前
      |
      SQL 监控 Java
      Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
      本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
      12 2
      |
      20天前
      |
      Java 数据库连接 数据库
      优化之路:Java连接池技术助力数据库性能飞跃
      在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
      25 4
      |
      17天前
      |
      Java 数据库连接 数据库
      深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
      在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
      16 1