Spring整合日志框架Log4j2
对于一款软件而言,日志记录都是十分重要的。它不仅能够监控程序的运行情况,周期性的记录到文件中,还能够跟踪程序中代码的运行轨迹,向文件或控制台打印代码的调试信息。当程序出现错误时,日志记录可以帮助开发人员及时定位问题,因此对开发人员来说,日志记录更是尤为重要。
Spring 5 框架自带了通用的日志封装,但是我们依然可以整合其他的日志框架对日志进行记录,其中最广为人知的就是大名鼎鼎的 Log4j。
Log4j 是 Apache 提供的一款开源的强有力的 Java 日志记录工具。它可以通过配置文件灵活、细致地控制日志的生成过程,例如日志级别、日志的输出类型、日志的输出方式以及输出格式等。
Log4j 共有两个大版本,如下表所示。
Spring 整合 Log4j2
Spring 5 是基于 Java 8 实现的,其自身作了不少的优化,将许多不建议使用的类和方法从代码库中删除,其中就包括了 Log4jConfigListener(Spring 加载 Log4j 配置的监听器)。因此从 Spring 5 开始就不在支持对 Log4j 的整合,而更加推荐我们通过 Log4j2 进行日志记录。
下面我们们就来介绍下 Spring 是如何整合 Log4j2 的。
新建一个名为 my-spring-log4j-demo 的 Spring 项目,并将与 Spring 相关的 Jar 包导入到该项目中。
使用浏览器访问 Log4j2 官网,点击左侧导航栏中的 Download,跳转到 Log4j2 的下载页面。
图1:Log4j2 下载页面
我们根据自身操作系统的不同,选择不同的压缩包
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,因此这里就以此版本为例进行讲解。对下载完成的压缩包进行解压,并将以下 3 个依赖包导入到 my-spring-log4j-demo 项目中。
log4j-api-2.17.1.jar
log4j-core-2.17.1.jar
log4j-slf4j18-impl-2.17.1.jar此外,我们还需要向 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 下载页面
- 在 src 目录下,创建一个名为 log4j2.xml 的配置文件,配置内容如下。
<?xml version="1.0" encoding="UTF-8"?>
在 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);
}
}在 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>
在 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(“代码执行完成!”);
}
}执行 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相关推荐
- spring日志报错提醒_Spring Boot 2.x : 整合日志框架 Log4j2
日志框架概述 在一个 web 项目建设中,如果说第一件事是 Spring 框架的搭建,那么第二件事就是日志框架的搭建,线上 web 项目的日志可能是我们了解项目运行的唯一方式. 常用日志框架 java ...
- 【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架
Spring 引言 什么是 Spring? 工厂设计模式 简单工厂的设计 通用工厂的设计 通用工厂的使用方式 第一个 Spring 程序 环境搭建 Spring 的核心API 程序开发 细节分析 Sp ...
- 更换Spring底层日志框架
更换Spring底层日志框架 spring-jcl 在spring中有一个模块叫做spring-jcl,是Spring的日志框架,底层是会对日志框架进行判断的,是根据日志框架做优先级选取的. spri ...
- 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发
1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...
- Spring整合Struts2框架的第一种方式(Action由Struts2框架来创建)。在我的上一篇博文中介绍的通过web工厂的方式获取servcie的方法因为太麻烦,所以开发的时候不会使用。...
1. spring整合struts的基本操作见我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10140588.html,这里面将spring与struts2 ...
- 最牛逼 Java 日志框架 — Log4j2,性能无敌,横扫对手.....
Logback 算是JAVA 里一个老牌的日志框架,从06年开始第一个版本,迭代至今也十几年了.不过logback最近一个稳定版本还停留在 2017 年,好几年都没有更新:logback的兄弟 slf ...
- 日志框架LOG4J2系列二——log4j2配置文件
日志框架LOG4J2系列二--log4j2配置文件 一.log4j2支持的配置文件格式 二.log4j2.xml配置文件 三.log4j2.xml配置项详解 总结 上一节:日志框架LOG4J2系列一- ...
- 日志框架LOG4J2系列一——入门
一.Log4j2简介 log4j2是log4j1.x的升级版本,它提供很多Logback的特性,而且修复了Logback架构上的问题,具体请参考log4j2官网[Log4j – Apache Log4 ...
- 3.1.spring boot 日志框架SLF4j使用示例
目前比较常用的有以下几种日志框架 JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 其中SpringBoot主要是使用 SLF4j和logbac ...
最新文章
- kafka原理_Kafka动态配置实现原理解析
- 阿里云数据库POLARDB技术沙龙火热报名中,李飞飞,曹伟 众大神齐到场,200个席位先到先得!...
- 洛谷P1027 Car的旅行路线 计算几何 图论最短路
- 【世界上最优秀的逆向分析工具】IDA Pro6.1绿色版
- 十六进制字符转二进制字符
- nyoj13-Fibonacci数
- 微信小程序把玩(二十六)navigator组件
- python函数应用_python 函数应用
- 项目研发流程及管理之我见
- 百度AI学习:四、自然语言处理-1.词法分析
- Magento2创建自定义Widget 并通过添加图片选择器插入图片
- HIve map jion的原理、操作和使用场景
- 计算机软考初级信息技术试题及答案,2015年软考信息技术处理员考试模拟试题及答案...
- M7贴片二极管可以与什么型号的二极管通用?
- win7系统如何添加环境变量
- 人物画像及“七步人物角色法”
- 电感的饱和电流 均方值电流 额定电流的认识
- ubuntu华硕Z87-plus主板网卡驱动
- 通过比赛整理出的8条Numpy实用技巧【你知道如何频数统计和按某列进行排序么?】...
- windows 10 cortana搜索功能失效