Spring Boot中对log4j进行多环境不同日志级别的控制
之前介绍了在《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.properties和application-test.properties配置文件中添加日志级别定义:logging.level.com.didispace=DEBUGapplication-prod.properties配置文件中添加日志级别定义:logging.level.com.didispace=INFO
通过上面的定义,根据logging.level.com.didispace在不同环境的配置文件中定义了不同的级别,但是我们已经把日志交给了log4j管理,看看我们log4j.properties中对com.didispace包下的日志定义是这样的,固定定义了DEBUG级别,并输出到名为didifile定义的appender中。
# LOG4J配置 |
那么,要如何动态的改变这个DEBUG级别呢?在《Spring Boot属性配置文件详解》中还提到了关于配置文件中参数的引用。我们需要将DEBUG替换成application-{profile}.properties配置文件中定义logging.level.com.didispace即可,所以配置变为如下内容:
# LOG4J配置 |
到这里我们已经完成了所有配置工作,我们可以通过运行单元测试,然后看my.log文件中输出的日志内容。通过修改默认的application-dev.properties配置的日志级别为INFO,再运行单元测试的DEBUG内容是否被输出到了my.log中验证参数是否被正确引用了。
对于不同环境的使用人员也不需要改变代码或打包文件,只需要通过执行命令中参加参数即可,比如我想采用生产环境的级别,那么我可以这样运行应用:
java -jar xxx.jar --spring.profiles.active=prod |
Spring Boot中对log4j进行多环境不同日志级别的控制的更多相关文章
- Spring boot中使用log4j记录日志
之前在Spring Boot日志管理一文中主要介绍了Spring Boot中默认日志工具(logback)的基本配置内容.对于很多习惯使用log4j的开发者,Spring Boot依然可以很好的支持, ...
- 52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需 ...
- 46. Spring Boot中使用AOP统一处理Web请求日志
在之前一系列的文章中都是提供了全部的代码,在之后的文章中就提供核心的代码进行讲解.有什么问题大家可以给我留言或者加我QQ,进行咨询. AOP为Aspect Oriented Programming的缩 ...
- Spring boot中使用log4j
我们知道,Spring Boot中默认日志工具为logback,但是对于习惯了log4j的开发者,Spring Boot依然可以很好的支持,只是需要做一些小小的配置功能.Spring Boot使用lo ...
- 转:Spring Boot中使用AOP统一处理Web请求日志
在spring boot中,简单几步,使用spring AOP实现一个拦截器: 1.引入依赖: <dependency> <groupId>org.springframewor ...
- Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- (转)Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- Spring Boot中使用log4j实现http请求日志入mongodb
之前在<使用AOP统一处理Web请求日志>一文中介绍了如何使用AOP统一记录web请求日志.基本思路是通过aop去切web层的controller实现,获取每个http的内容并通过log4 ...
- Spring Boot log4j多环境日志级别的控制
之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...
随机推荐
- 如何在一台 web 服务器上注册CA证书
试验环境介绍(CA的主机为192.168.23.10.httpd的主机为:192.168.23.11) 1:新建一台web服务器,主机名为www yum install -y httpd 2:生成 ...
- AVAudioPlayer播放音乐
1:首先创建一个新的项目,继承自UIViewController 2:导入框架AVFoundation.framework 右键工程名,在Build Phases的Link Binary With L ...
- 【leetcode】59.Spiral Matrix II
Leetcode59 Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 ...
- 第181天:HTML5——视频、音频
一.HTML5新增的video.source标签 <video width="320" height="240" controls="contr ...
- P3629 [APIO2010]巡逻
题目描述 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任一个村庄.每条道 ...
- [JSOI2009]电子字典 hash
题面:洛谷 题解: 做法....非常暴力. 因为要求的编辑距离最多只有1,所以我们直接枚举对那个位置(字符)进行操作,进行什么样的操作,加入/修改/删除哪个字符,然后暴力枚举hash判断即可, #in ...
- 【BZOJ4361】isn(动态规划,容斥)
[BZOJ4361]isn(动态规划,容斥) 题面 BZOJ 题解 首先我们如果确定了一个不降序列,假设它的长度为\(i\), 那么可行的方案数为\(i*(n-i)!\),但是这样有一些非法的情况,即 ...
- bzoj3748 Kwadraty
Claris 当然是要用来%的 但是,,其他dalao,,比如JL的红太阳commonc.题解能不能稍微加几句话,蒟蒻看不懂啊. 在这里解释一下,Claris的题解.(因为我弱,想了半天才明白,所以觉 ...
- 【莫队】【P3834】 【模板】可持久化线段树 1(主席树)
大家好,我是个毒瘤,我非常喜欢暴力数据结构,于是我就用莫队+分块过了这个题 Solution 发现这个题静态查询资瓷离线,于是考虑莫队. 在这里简单介绍一下莫队: 将所有询问离线后,对原序列分块.按照 ...
- intellij 插件结构(文件结构以及概念层面上的结构)
1.插件内的文件 2.插件类加载器 3.插件组件(component) 4.插件的扩展以及扩展点(Extensions.Extension Points) 5.插件的Action 6.插件的Servi ...