之前介绍了在《Spring boot中使用log4j记录日志》,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑log4j.properties文件来调整日志级别,不论在版本库中默认保存哪个环境的级别设定,都会增加其他环境使用人员的工作量,虽然很细微,但是手工修改总不是一件很好的选择,难免会发现修改后误提交等问题。

那么,有没有办法对于开发人员、运维人员都不需要改变源代码实现不同环境的不同日志级别呢?

是否还记得之前在《Spring Boot属性配置文件详解》一文中,提到的关于Spring Boot多环境的配置以及属性文件中的参数引用?若没有了解过相关内容,建议先阅读该文后继续此篇内容。

尝试改造

先以chapter4-2-2工程作为基础工程,我们来进行多环境配置的改造。

  • 创建多环境配置文件

    • application-dev.properties:开发环境
    • application-test.properties:测试环境
    • application-prod.properties:生产环境
  • application.properties中添加属性:spring.profiles.active=dev(默认激活application-dev.properties配置)
  • application-dev.propertiesapplication-test.properties配置文件中添加日志级别定义:logging.level.com.didispace=DEBUG
  • application-prod.properties配置文件中添加日志级别定义:logging.level.com.didispace=INFO

通过上面的定义,根据logging.level.com.didispace在不同环境的配置文件中定义了不同的级别,但是我们已经把日志交给了log4j管理,看看我们log4j.properties中对com.didispace包下的日志定义是这样的,固定定义了DEBUG级别,并输出到名为didifile定义的appender中。

# LOG4J配置log4j.category.com.didispace=DEBUG, didifile

# com.didispace下的日志输出log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.didifile.file=logs/my.loglog4j.appender.didifile.DatePattern='.'yyyy-MM-ddlog4j.appender.didifile.layout=org.apache.log4j.PatternLayoutlog4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

那么,要如何动态的改变这个DEBUG级别呢?在《Spring Boot属性配置文件详解》中还提到了关于配置文件中参数的引用。我们需要将DEBUG替换成application-{profile}.properties配置文件中定义logging.level.com.didispace即可,所以配置变为如下内容:

# LOG4J配置log4j.category.com.didispace=${logging.level.com.didispace}, didifile

# com.didispace下的日志输出log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.didifile.file=logs/my.loglog4j.appender.didifile.DatePattern='.'yyyy-MM-ddlog4j.appender.didifile.layout=org.apache.log4j.PatternLayoutlog4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

到这里我们已经完成了所有配置工作,我们可以通过运行单元测试,然后看my.log文件中输出的日志内容。通过修改默认的application-dev.properties配置的日志级别为INFO,再运行单元测试的DEBUG内容是否被输出到了my.log中验证参数是否被正确引用了。

对于不同环境的使用人员也不需要改变代码或打包文件,只需要通过执行命令中参加参数即可,比如我想采用生产环境的级别,那么我可以这样运行应用:

java -jar xxx.jar --spring.profiles.active=prod

代码示例

本文的相关例子可以查看下面仓库中的chapter4-2-3目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning
  • Gitee:https://gitee.com/didispace/SpringBoot-Learning

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!


Spring Boot中对log4j进行多环境不同日志级别的控制相关推荐

  1. Spring boot中使用log4j记录日志

    之前在Spring Boot日志管理 一文中主要介绍了Spring Boot中默认日志工具(logback)的基本配置内容.对于很多习惯使用log4j的开发者,Spring Boot依然可以很好的支持 ...

  2. Spring Boot中使用AOP统一处理Web请求日志

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...

  3. Spring Boot –使用执行器端点在运行时配置日志级别

    从Spring Boot 1.5开始,新的loggers器执行器端点允许在运行时查看和更改应用程序记录级别. 将spring-boot-actuator添加到您的项目 <dependency&g ...

  4. Spring Boot中使用log4j实现http请求日志入mongodb

    之前在<使用AOP统一处理Web请求日志>一文中介绍了如何使用AOP统一记录web请求日志.基本思路是通过aop去切web层的controller实现,获取每个http的内容并通过log4 ...

  5. Spring Boot log4j多环境日志级别的控制

    之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...

  6. log4j记录不同的日志_Spring boot中使用log4j记录日志

    之前在Spring Boot日志管理 一文中主要介绍了Spring Boot中默认日志工具(logback)的基本配置内容.对于很多习惯使用log4j的开发者,Spring Boot依然可以很好的支持 ...

  7. Java笔记-Log4j在Spring Boot中的使用

    在Java企业级开发中都需要日志记录相关的操作. Maven相关配置如下,首先要去除Spring Boot自带的日志,然后添加log4j2的日志: <dependency><grou ...

  8. 在Spring Boot中使用Log4j2

    实在看不下去搜索引擎查出来的文章中各种错误的配置信息,于是翻译了下文. 翻译原文:How to use Log4j2 with Spring Boot Apache Lo4j 2 是Log4j 1.x ...

  9. 【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署

    嵌入式 servlet 容器 在 spring boot 之前的web开发,我们都是把我们的应用部署到 Tomcat 等servelt容器,这些容器一般都会在我们的应用服务器上安装好环境,但是 spr ...

最新文章

  1. 【目标检测】(5) YOLOV1 目标检测原理解析
  2. Httprunner生成Allure格式HTML报告
  3. python的函数式编程玩法+年末小感
  4. 以太坊节点布置(3) 启动geth客户端
  5. Spring Boot定时任务-Quartz基本使用
  6. Maven 搭建spring boot多模块项目(附源码)
  7. Qt+VS2005(配置步骤)
  8. linux下mysql目录结构_linux下mysql安装配置与目录结构
  9. Spring Boot 学习系列(05)—自定义视图解析规则
  10. InnoDB引擎WAL机制之Redo Log
  11. java 释放锁,在Java中以原子方式释放多个锁
  12. 【转】博客美化(6)为你的博文自动添加目录
  13. BP神经网络之BP算法手写推导
  14. JS+CSS实现幻灯片
  15. 双创项目_宫颈癌智能风险检测(4)
  16. 地址栏中的#是什么意思
  17. django 关于视频播放
  18. 怎么在html中设置天数倒计时,PPT里面怎样设置时间倒计时,求大佬指教?
  19. mysql---分库分表
  20. 中国游戏出海-游戏海外本地化成功案例

热门文章

  1. Core Location :⽤用于地理定位
  2. C语言const易错点
  3. 嵌入式算法-傅里叶变换算法
  4. 写flash,要不要加个判断?
  5. 感觉stm32太简单是一种自负吗?
  6. 不知道的,还以为是555牌香烟
  7. 搞懂进程组、会话、控制终端关系,才能明白守护进程干嘛的?
  8. Linux 内核系统架构
  9. Windows环境下的安装gcc
  10. 计算机一级考试教学设计,《全国计算机一级考试》教学设计说明.doc