• SpringBoot日志框架选型——Log4j2的配置与使用


    Apache Log4j 2是Log4j的升级,对其前身Log4j 1.x进行了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固作者有问题。虽然2021年出现过重大Bug(非得加N种特性,满足需求就好不要加各种花里胡哨的,后期可以考虑插件添加特性),也不妨碍它是Java界目前最火最快最好的日志框架。
    本次介绍的版本是2.18.0

    log4j2.png

    SpringBoot日志框架选型——Log4j2的配置与使用

    1. 名词介绍

    在选择日志框架的时候大家是不是也和我一样,被各种名词所困扰?这里给大家介绍一下吧:

    这里我们先来了解一下什么是日志门面框架,它就像一个司令官,接受到你的命令之后他会找具体的士兵进行具体的输出日志操作。那为啥叫门面呢?找人办事至少得有门路对不。

    名词作用简介
    JCL日志门面框架Apache Commons Logging之前叫Jakarta Commons Logging,简称JCL,提供了一个 Log 接口,该接口既轻量级又是其他日志记录工具包的独立抽象。它为中间件/工具开发人员提供了一个简单的日志记录抽象,允许开发人员选择特定的日志实现。很遗憾的是它于2014-07-09停止了更新,停在了1.2版本了。
    SLF4J日志门面框架The Simple Logging Facade for Java作为各种日志记录框架(例如.java.util.loglog,logback,log4j)的简单外观或抽象,允许最终用户在部署时选择所需的日志记录框架。Ceki Gülcü创建了SLF4J作为Jakarta commons-logging框架的替代品。

    下面介绍的是日志实现框架,这个就是士兵了,司令官接收到命令之后,就会找具体的士兵去执行了,可以是A士兵也可以是B士兵,看开发人员的心情了。

    名词作用简介
    JUL日志实现框架JAVA自带的日志记录工具,在java.util.logging包下面,是平台核心日志记录工具的类和接口。日志记录 API 的中心目标是支持在客户站点维护和维护软件。
    Log4j日志实现框架Apache Log4j 1.x,可惜的是在2015年8月5日停止了更新。作者:Ceki Gülcü
    Log4j2日志实现框架Apache Log4j 2是Log4j的升级,对其前身Log4j 1.x进行了重大改进所有并不兼容1.x,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。
    Logback日志实现框架Logback旨在作为流行的log4j项目的继承者。它由log4j的创始人Ceki Gülcü设计。建立在设计工业强度测井系统方面十年的经验之上。由此产生的产品,即日志备份,比所有现有的日志记录系统更快,占用空间更小,有时幅度很大。同样重要的是,logback提供了其他日志记录系统中缺少的独特且相当有用的功能。

    那我们来看看Log4j2官网的性能对比吧:
    https://logging.apache.org/log4j/2.x/manual/async.html#Performance
    与其他日志记录包的异步吞吐量比较图
    asyncthroughputcomparison.png
    响应时间延迟对比图
    ResponseTimeAsyncLogging16Threads8kEach.png
    通过上面的介绍,我们知道司令员只能选择SLF4J了,然后士兵我们也是选择性能最高的Log4j2了。
    文末有演示代码仓。
    image.png

    2. Log4j2文档介绍

    Log4j2官网教程
    https://logging.apache.org/log4j/2.x/articles.html
    打开官网,就可以看到有中文的教程(PS:如果有清楚如何在这里添加文章的大佬可以滴滴我~):
    image.png

    SpringBoot配置文件官网配置:log4j2.xml
    https://github.com/spring-projects/spring-boot/blob/v2.7.2/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/log4j2/log4j2.xml
    image.png

    3. SpringBoot使用Log4j2

    我们先来看一下SpringBoot官方推荐的日志实现框架Logback:
    image.png
    是不是很简单,直接集成在web里面了。

    我们在使用Log4j2之前需要先排除starter-logging,如下所示:
    https://docs.spring.io/spring-boot/docs/2.7.2/reference/htmlsingle/#howto.logging.log4j

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-loggingartifactId>
            exclusion>
        exclusions>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-log4j2artifactId>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    排除之前的包如下:
    image.png
    排除之后:
    image.png

    包加上之后,需要在resources文件夹下面添加log4j2.xml文件,在没有配置之前我们看看效果:
    image.png
    可以看到只会打印Error级别的日志。
    然后我们到https://github.com/apache/logging-log4j2,说明里面添加如下配置。

    
    <Configuration>
      <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
          <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        Console>
      Appenders>
      <Loggers>
        <Logger name="com.jack" level="INFO"/>
        <Root level="info">
          <AppenderRef ref="Console"/>
        Root>
      Loggers>
    Configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    特别注意红色框的内容,第一个包需要改成你的项目包。或者下面Console级别改成info。
    image.png
    可以看到日志正常输出了。

    到这里配置就完成了,后期再出具体配置的文章,讲解一下一般项目中我们怎么配置log4j2.xml文件。
    代码仓地址:https://gitee.com/jack0240/spring-boot-demo.git

  • 相关阅读:
    iText7高级教程之构建基础块——6.创建动作(Action)、目标(destinations)和书签(bookmarks)
    Max Sum Plus Plus HDU - 1024
    格芯斥资80亿欧元,提高德国德累斯顿的产能,并寻求与台积电相当的政府补贴
    js原生ajax请求
    将Vite添加到您现有的Web应用程序
    Intouch Historian历史曲线配置导入导出
    C++ 模板实现—双向链表: doubly linked list
    [项目管理-29]:SMART项目计划制定与PDCA闭环监控,珠联璧合,双剑合一。
    使用IDEA快速创建一个SpringBoot项目
    相控阵天线(九):平面阵列天线综合(不可分离型切比雪夫分布、圆口径泰勒综合、可分离型分布、配相抵消法)
  • 原文地址:https://blog.csdn.net/WeiHao0240/article/details/126333621