在spring boot中log4j2编程式配置(Programmatic Configuration)步骤

本文介绍了如何在 Spring Boot 应用中实现 Log4j2 的编程式配置,包括创建自定义 ConfigurationFactory 类,设置配置工厂,以及在 Gradle 依赖中排除默认日志系统,确保统一使用 Log4j2。同时,文章提醒读者避免在入口类中声明静态 Logger 变量,并指出编程式配置会覆盖 log4j2.xml 文件,以及配置执行的时机和顺序注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实官网已经说的比较清楚了:https://logging.apache.org/log4j/2.x/manual/customconfig.html


下面根据自己的实践稍微总结一下:

1、编写 自定义ConfigurationFactory 继承自org.apache.logging.log4j.core.config.ConfigurationFactory。命名为CustomConfigurationFactory,具体代码怎么实现可以看官网。

2、在spring boot 入口类中加入如下代码之一:

System.setProperty("log4j.configurationFactory","com.gionee.cloud.genny.trace.CustomConfigurationFactory");

或者
ConfigurationFactory.setConfigurationFactory(new CustomConfigurationFactory());

3、修改依赖配置,我用的是gradle,如下:

compile ('org.springframework.boot:spring-boot-starter')
{
  exclude module: 'spring-boot-starter-logging'
  exclude module: 'logback-classic'
}
compile ('org.springframework.boot:spring-boot-starter-web') 
{
  exclude module: 'spring-boot-starter-logging'
  exclude module: 'logback-classic'
}
compile 'org.springframework.boot:spring-boot-starter-log4j2'

或者追求log4j2新新版本的可以不用spring boot自带的,如下:

compile ('org.springframework.boot:spring-boot-starter')
{
  exclude module: 'spring-boot-starter-logging'
  exclude module: 'logback-classic'
}
compile ('org.springframework.boot:spring-boot-starter-web') 
{
  exclude module: 'spring-boot-starter-logging'
  exclude module: 'logback-classic'
}
compile 'org.apache.logging.log4j:log4j-api:2.8.2'
compile 'org.apache.logging.log4j:log4j-core:2.8.2'

当然了你也可以不用 exclude spring boot默认的日志。但是这样的后果就是:有两套日志系统,不建议这么干。既然要用就是统一为log4j2.


上一篇文章中总结了容易犯错的地方,这里再重申一下,因为一不小心就被你踩中了:

1、在入口类中,不可有如下的类变量申明:

private static final Logger logger = LogManager.getLogger(App.class);

2、如果采取编程式配置,则spring boot框架不会去加载log4j2.xml文件,即使有也不会加载,也就是说失效了(混合式除外)。

3、编程式配置的3中方法——一定要写在入口类的最前面,保证首先执行:

1)、申明系统变量System.setProperty("log4j.configurationFactory","com.gionee.cloud.genny.trace.CustomConfigurationFactory");

2)、ConfigurationFactory.setConfigurationFactory(new CustomConfigurationFactory());

3)、插件形式System.setProperty("log4j.plugin.packages","com.gionee.cloud.genny.trace.*");(此方法一直没成功,推荐用前面两种其中之一)


注:一定要注意第一点,否则不能保证第三点首先执行。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值