对于一款软件而言,日志记录都是十分重要的。它不仅能够监控程序的运行情况,周期性的记录到文件中,还能够跟踪程序中代码的运行轨迹,向文件或控制台打印代码的调试信息。当程序出现错误时,日志记录可以帮助开发人员及时定位问题,因此对开发人员来说,日志记录更是尤为重要。

Spring 5 框架自带了通用的日志封装,但是我们依然可以整合其他的日志框架对日志进行记录,其中最广为人知的就是大名鼎鼎的 Log4j。

Log4j 是 Apache 提供的一款开源的强有力的 Java 日志记录工具。它可以通过配置文件灵活、细致地控制日志的生成过程,例如日志级别、日志的输出类型、日志的输出方式以及输出格式等。

Log4j 共有两个大版本,如下表所示。

Spring 整合 Log4j2
Spring 5 是基于 Java 8 实现的,其自身作了不少的优化,将许多不建议使用的类和方法从代码库中删除,其中就包括了 Log4jConfigListener(Spring 加载 Log4j 配置的监听器)。因此从 Spring 5 开始就不在支持对 Log4j 的整合,而更加推荐我们通过 Log4j2 进行日志记录。

下面我们们就来介绍下 Spring 是如何整合 Log4j2 的。

  1. 新建一个名为 my-spring-log4j-demo 的 Spring 项目,并将与 Spring 相关的 Jar 包导入到该项目中。

  2. 使用浏览器访问 Log4j2 官网,点击左侧导航栏中的 Download,跳转到 Log4j2 的下载页面。

图1:Log4j2 下载页面

  1. 我们根据自身操作系统的不同,选择不同的压缩包
    apache-log4j-2.xx.x-bin.zip:为 Log4j2 为 Windows 系统提供的的压缩包。
    apache-log4j-2.xx.x-bin.tar.gz:为 Log4j2 为 linux、MacOsX 系统提供的压缩包。
    特别注意:由于 Log4j2 在 2021 年 12 月 10 日被曝存在远程代码执行漏洞,所有 Apache Log4j 2.x <= 2.14.1 版本均受到影响。随后,Log4j2 官方对此漏洞进行了了修复,因此我们在引入 Log4j2 的依赖时,尽量选择最新版本。编写本教程时,Log4j2 的最新版本为 Log4j 2.17.1,因此这里就以此版本为例进行讲解。

  2. 对下载完成的压缩包进行解压,并将以下 3 个依赖包导入到 my-spring-log4j-demo 项目中。
    log4j-api-2.17.1.jar
    log4j-core-2.17.1.jar
    log4j-slf4j18-impl-2.17.1.jar

  3. 此外,我们还需要向 my-spring-log4j-demo 项目中导入一个 slf4j-api-xxx.jar ,但该依赖包的版本是有限制的。

此前,我们下载的 Log4j2 的依赖包中有一个 log4j-slf4j18-impl-2.17.1.jar,它是 Log4j2 提供的绑定到 SLF4J 的配置器。

Log4j2 提供了以下 2 个适配器:
log4j-slf4j-impl 应该与 SLF4J 1.7.x 版本或更早版本一起使用。
log4j-slf4j18-impl 应该与 SLF4J 1.8.x 版本或更高版本一起使用。

因此,我们向项目中引入的 slf4j-api-xxx.jar 必须为 1.8.x 及以上版本。这里我们以 slf4j-api-1.8.0-beta4.jar 为例,该 Jar 包我们可以使用浏览器访问的 slf4j-api 的 Maven 仓库进行下载,如下图。

图2:SLF4J API 下载页面

  1. 在 src 目录下,创建一个名为 log4j2.xml 的配置文件,配置内容如下。

<?xml version="1.0" encoding="UTF-8"?>

  1. 在 net.biancheng.c 包下,创建一个名为 HelloLog4j 的 Java 类,代码如下。
    package net.biancheng.c;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    public class HelloLog4j {
    private static final Logger log = LoggerFactory.getLogger(HelloLog4j.class);
    private String message;
    public void setMessage(String message) {
    this.message = message;
    }
    public void getMessage() {
    log.info(“消息为:” + message);
    }
    }

  2. 在 src 目录下创建一个 Beans.xml,配置内容如下。

<?xml version="1.0" encoding="UTF-8"?>

<bean id="helloLog4j" class="net.biancheng.c.HelloLog4j"><property name="message" value="Hello,Spring!"/>
</bean>
  1. 在 net.biancheng.c 包下,创建一个 MainApp 的类,代码如下。
    package net.biancheng.c;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class MainApp {
    private static final Logger log = LoggerFactory.getLogger(MainApp.class);
    public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext(“Beans.xml”);
    log.info(“正在从容器中获取 HelloLog4j 的 Bean”);
    HelloLog4j obj = context.getBean(“helloLog4j”, HelloLog4j.class);
    obj.getMessage();
    log.info(“代码执行完成!”);
    }
    }

  2. 执行 MainApp 中的 main() 方法,控制台输出如下。
    2022-01-13 16:54:39.883 [main] INFO net.biancheng.c.MainApp - 正在从容器中获取 HelloLog4j 的 Bean
    2022-01-13 16:54:39.890 [main] INFO net.biancheng.c.HelloLog4j - 消息为:Hello,Spring!
    2022-01-13 16:54:39.891 [main] INFO net.biancheng.c.MainApp - 代码执行完成!

Spring整合日志框架Log4j2相关推荐

  1. spring日志报错提醒_Spring Boot 2.x : 整合日志框架 Log4j2

    日志框架概述 在一个 web 项目建设中,如果说第一件事是 Spring 框架的搭建,那么第二件事就是日志框架的搭建,线上 web 项目的日志可能是我们了解项目运行的唯一方式. 常用日志框架 java ...

  2. 【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架

    Spring 引言 什么是 Spring? 工厂设计模式 简单工厂的设计 通用工厂的设计 通用工厂的使用方式 第一个 Spring 程序 环境搭建 Spring 的核心API 程序开发 细节分析 Sp ...

  3. 更换Spring底层日志框架

    更换Spring底层日志框架 spring-jcl 在spring中有一个模块叫做spring-jcl,是Spring的日志框架,底层是会对日志框架进行判断的,是根据日志框架做优先级选取的. spri ...

  4. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  5. Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。...

    1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...

  6. 最牛逼 Java 日志框架 — Log4j2,性能无敌,横扫对手.....

    Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了.不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新:logback的兄弟 slf ...

  7. 日志框架LOG4J2系列二——log4j2配置文件

    日志框架LOG4J2系列二--log4j2配置文件 一.log4j2支持的配置文件格式 二.log4j2.xml配置文件 三.log4j2.xml配置项详解 总结 上一节:日志框架LOG4J2系列一- ...

  8. 日志框架LOG4J2系列一——入门

    一.Log4j2简介 log4j2是log4j1.x的升级版本,它提供很多Logback的特性,而且修复了Logback架构上的问题,具体请参考log4j2官网[Log4j – Apache Log4 ...

  9. 3.1.spring boot 日志框架SLF4j使用示例

    目前比较常用的有以下几种日志框架 JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 其中SpringBoot主要是使用 SLF4j和logbac ...

最新文章

  1. kafka原理_Kafka动态配置实现原理解析
  2. 阿里云数据库POLARDB技术沙龙火热报名中,李飞飞,曹伟 众大神齐到场,200个席位先到先得!...
  3. 洛谷P1027 Car的旅行路线 计算几何 图论最短路
  4. 【世界上最优秀的逆向分析工具】IDA Pro6.1绿色版
  5. 十六进制字符转二进制字符
  6. nyoj13-Fibonacci数
  7. 微信小程序把玩(二十六)navigator组件
  8. python函数应用_python 函数应用
  9. 项目研发流程及管理之我见
  10. 百度AI学习:四、自然语言处理-1.词法分析
  11. Magento2创建自定义Widget 并通过添加图片选择器插入图片
  12. HIve map jion的原理、操作和使用场景
  13. 计算机软考初级信息技术试题及答案,2015年软考信息技术处理员考试模拟试题及答案...
  14. M7贴片二极管可以与什么型号的二极管通用?
  15. win7系统如何添加环境变量
  16. 人物画像及“七步人物角色法”
  17. 电感的饱和电流 均方值电流 额定电流的认识
  18. ubuntu华硕Z87-plus主板网卡驱动
  19. 通过比赛整理出的8条Numpy实用技巧【你知道如何频数统计和按某列进行排序么?】...
  20. windows 10 cortana搜索功能失效

热门文章

  1. jQuery - end方法的用法
  2. mysql查看数据库的容量及表容量
  3. 石家庄地铁查询双人项目进度总结
  4. BeanCopier系列之二:使用Converter
  5. Oracle数据库精讲与疑难解析(第2版)
  6. leetcode刷题250天(65)——1823. 找出游戏的获胜者(约瑟夫环问题)
  7. 【维修】如何成功做网线?
  8. MATLAB随机森林计算重要性
  9. c语言实现表白代码,给你现在(未来)的那个她(他)准备一个吧
  10. [574]tf.nn.xw_plus_b