52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑log4j-spring.properties文件来调整日志级别,不论在版本库中默认保存哪个环境的级别设定,都会增加其他环境使用人员的工作量,虽然很细微,但是手工修改总不是一件很好的选择,难免会发现修改后误提交等问题。
那么,有没有办法对于开发人员、运维人员都不需要改变源代码实现不同环境的不同日志级别呢?
这时候Spring Boot多环境的配置以及属性文件中的参数引用这个技术就很重要了(可以参考上一篇文章)。
创建多环境配置文件
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
在resources下创建以上3个文件。application.properties中添加属性:spring.profiles.active=dev(默认激活application-dev.properties配置)application-dev.properties和application-test.properties配置文件中添加日志级别定义:logging.level.com.kfit=info
application-prod.properties配置文件中添加日志级别定义:logging.level.com.kfit=ERROR
通过上面的定义,根据logging.level.com.kfit在不同环境的配置文件中定义了不同的级别,但是我们已经把日志交给了log4j管理,看看我们log4j-spring.properties中对com.kfit包下的日志定义是这样的,固定定义了DEBUG级别,并输出到名为didifile定义的appender中。
# LOG4J配置
log4j.rootCategory=INFO, stdout, file, errorfile
# com.kfit包下的日志配置
log4j.category.com.kfit=DEBUG,didifile
# com.kfit下的日志输出
log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.didifile.file=logs/my.log
log4j.appender.didifile.DatePattern='.'yyyy-MM-dd
log4j.appender.didifile.layout=org.apache.log4j.PatternLayout
log4j.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.kfit即可,所以配置变为如下内容:
# com.kfit包下的日志配置
log4j.category.com.kfit=${logging.level.com.kfit},didifile
到这里我们已经完成了所有配置工作,我们可以通过运行单元测试,然后看my.log文件中输出的日志内容。通过修改默认的application-dev.properties配置的日志级别为INFO,再运行单元测试的DEBUG内容是否被输出到了my.log中验证参数是否被正确引用了。
对于不同环境的使用人员也不需要改变代码或打包文件,只需要通过执行命令中参加参数即可,比如我想采用生产环境的级别,那么我可以这样运行应用:
java -jar xxx.jar --spring.profiles.active=prod
这里有一个坑,一不小都会掉进去的,我们在java Run configurations配置的启动参数在单元测试中是无效的,这个是一个很深的陷阱,呼一声就掉进去了,反正我是进去了,然后我发现不管我这么改,都是激活了dev,最后经过不断的寻找资料才知道,如果想在单元测试中激活profiles的话,那么是需要进行配置的,怎么做呢,在单元测试类中添加如下注解即可:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(App.class)
/*
* @ActiveProfiles,可以指定一个或者多个 profile,
* 这样我们的测试类就仅仅加载这些名字的 profile 中定义的 bean 实例。
* 这里激活application-prod.properties配置文件.
*/
@ActiveProfiles("prod")
public class AppTest
【Spring Boot 系列博客】
49. spring boot日志升级篇—理论【从零开始学Spring Boot】
48. spring boot单元测试restfull API【从零开始学Spring Boot】
47. Spring Boot发送邮件【从零开始学Spring Boot】
46. Spring Boot中使用AOP统一处理Web请求日志
45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】
43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
42. Spring Boot多数据源【从零开始学Spring Boot】
41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
40. springboot + devtools(热部署)【从零开始学Spring Boot】
39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】
38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】
36 Spring Boot Cache理论篇【从零开始学Spring Boot】
35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
34Spring Boot的启动器Starter详解【从零开始学Spring Boot】
33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
31 Spring Boot导入XML配置【从零开始学Spring Boot】
52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】的更多相关文章
- 50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
如果你使用的是spring boot 1.4.0版本的话,那么你可能需要配合以下文章进行学习 90.Spring Boot 1.4 使用log4j错误[从零开始学Spring Boot] Log4j是 ...
- 54. spring boot日志升级篇—logback【从零开始学Spring Boot】
在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...
- 57. Spring 自定义properties升级篇【从零开始学Spring Boot】
之前在两篇文章中都有简单介绍或者提到过 自定义属性的用法: 25.Spring Boot使用自定义的properties[从零开始学Spring Boot] 51. spring boot属性文件之多 ...
- 17、Spring Boot普通类调用bean【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...
- 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter) ...
- 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
[原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
[原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...
- 77. Spring Boot Use Thymeleaf 3【从零开始学Spring Boot】
[原创文章,转载请注明出处] Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spri ...
- 75. Spring Boot 定制URL匹配规则【从零开始学Spring Boot】
在之前有一篇文章说了,博客名称从原来的<从零开始学Spring Boot>更改为<Spring Boot常见异常汇总>,后来写了几篇文章之后发展,有些文章还是一些知识点,所以后 ...
随机推荐
- justify-content属性
justify-content 用于设置或检索弹性盒子元素在主轴方向上的对齐方式. 属性值:flex-start 属性值:flex-end 属性值:center 属性值:space-between 属 ...
- CF379F New Year Tree
题意翻译 你是一个程序猿,现在有一棵新年树(并不是传统的带着叶子的树)--它有四个节点: 1,2,3,4. 其中2,3,4的父亲都是1. 新年里,程序猿们往往会做一些有趣的事情.你则选择以往这棵树上加 ...
- ACM_18(同余)
18 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一个简单的问题,大家应该有不少做过大数加法题吧.这个题的数据也是64位整数放 ...
- 因Window服务器自动更新并重启导致WebSphere服务停止服务故障一例
最近公司购买了两台Windows Server 2008 R2服务器用于提供提供Web服务,A机器安装了IHS+DM+WAS8.5集群,B机器安装了Oracle11gR2用于数据存储,两台机器均可连接 ...
- 转 DOS(CMD)下批处理换行问题/命令行参数换行 arg ms-dos
DOS(CMD)下批处理换行问题本人经常写一些DOS批处理文件,由于批处理中命令的参考较多且长,写在一行太不容易分辨,所以总想找个办法把一条命令分行来写,今天终于试成功两种方法.一.在CMD下,可以用 ...
- c# Queue实现生产者(Producer)消费者(Consumer)模式
我们在开发过程中经常会遇到需要从一个地方不断获取数据然后又需要交给另一个线程对数据进行二次加工的情况,这种场景适合使用生产者-消费者模式. Demo展示 //中间的容器 public static c ...
- 专题八:P2P编程
引言: 前面的介绍专题中有朋友向我留言说介绍下关于P2P相关的内容的,首先本人对于C#网络编程也不是什么大牛,因为能力的关系,也只能把自己的一些学习过程和自己的一些学习过程中的理解和大家分享下的,下面 ...
- ch1 About thinking skills
When confronted with a problem , we think about it. The issue, of course, is that our efforts may be ...
- html5前端杂记
首先是css的一些知识 毕竟自己懂得不多,但是一看资料.感觉似曾相识 <style> .red-text { color: red; } </style>//这里是css样式的 ...
- Selenium常用方法及函数
新建实例driver = webdriver.Chrome() 1.获取当前页面Url的函数方法:current_url实例:driver.current_url 2.表单的提交方法:submit解释 ...