52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】(_spring log针对不同类型单独定义级别-程序员宅基地

技术标签: spring boot  spirng boot  spring boot实战  spring boot教程  从零开始学Spring Boot  

 

【视频 & 交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 


 

 


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

 

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

       这时候Spring Boot多环境的配置以及属性文件中的参数引用这个技术就很重要了(可以参考上一篇文章)。

 

创建多环境配置文件

·         

o   application-dev.properties:开发环境

o   application-test.properties:测试环境

o   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.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-ddHH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

 

 

 

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

# 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 classAppTest

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linxingliang/article/details/52325051

智能推荐

Linux ntp时间服务器的搭建和配置-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏48次。Linux ntp时间服务器的搭建和配置date +"%Z %z"查看ntp服务器与上层ntp的状态【命令】ntpq -premote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先refid:参考上一层ntp主机地址st:stratum阶层when:多少秒前曾经同步过时间poll:下次更新在多少秒后reach:已经向上层ntp服务器要求更新的次数delay:网络延迟offset:时间补偿jit...

Android定位功能实现_android location-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏20次。android的定位功能有两种方式:1. 使用第三方地图sdk提供的定位功能。2. 使用sdk的Location实现,借助GPS(高精度)和网络(低精度)实现定位。_android location

Android系统升级那些事儿_edify 源码-程序员宅基地

文章浏览阅读9.7k次,点赞3次,收藏13次。本文描述了Android系统更新要用到的一些概念,用到的硬件、用于烧写的系统和用于系统更新的文件。_edify 源码

动手实现编译器(六)——实现全局变量_判定变量是否为全局变量在编译器哪一步-程序员宅基地

文章浏览阅读566次。我们在上一节中实现了对语句的编译,在这一节中,我们希望向语句中加入变量。实现以下语句:int a;int b;int c;int d;int e;int f;int g;a = 2;b = 3;c = 4;d = 5;e = 6;f = 7;g = 8;print a + b * c / d % e - f + g;这需要变量有以下功能:声明变量使用变量获取存储值给变量赋值相关语法定义变量声明: VarDecl → ‘int’ Ident ‘;’变量赋值:_判定变量是否为全局变量在编译器哪一步

UE4-DTKit:强大且灵活的Unreal Engine工具集-程序员宅基地

文章浏览阅读401次,点赞3次,收藏7次。UE4-DTKit:强大且灵活的Unreal Engine工具集项目地址:https://gitcode.com/hxhb/ue4-dtkitUE4-DTKit 是一个专为Unreal Engine 4开发的开源工具包,旨在提升游戏开发者和虚拟现实(VR)、增强现实(AR)应用制作者的工作效率。它包含了一系列实用模块,涵盖了场景管理、动画控制、UI系统优化等多个方面。在本文中,我们将深入探讨该...

再探Objective-C.8_hook c语言结构体 nsfilemanager-程序员宅基地

文章浏览阅读347次。• 本章是-Foundation框架里的其它常用类• 【**】集合类【容器类】• 字典【*】• 【**】概念:字典是一个无序的集合,它使通过键值对_hook c语言结构体 nsfilemanager

随便推点

Qt小例子学习75 - 把QGraphicsItem 保存到文本然后读出来显示_qt qgraphicspathitem 保存 读取saveitem-程序员宅基地

文章浏览阅读768次。Qt小例子学习75 - 把QGraphicsItem 保存到文本然后读出来显示#include "utils.h"#include <QApplication>#include <QDebug>#include <QFile>#include <QGraphicsLineItem>#include <QGraphicsScene>#include <QGraphicsView>#include <QTimer&g_qt qgraphicspathitem 保存 读取saveitem

详解十三款运维监控工具_听云 监控宝-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏42次。目录一、开源工具介绍1、Zabbix2、Nagios3、Ganglia4、Grafana5、Zenoss6、Open-falcon7、Cacti8、天兔开源监控(只适用于mysql、redis、oracle)二、商用运维监控系统篇1、监控宝2、听云3、360网站服务监控4、阿里云监控5、百度云观测纵观我们部署在基础设施当中并始终保持运作的全部测量机制,监控系统无疑是重要性最高的机制之一,但它却常常遭到我们的忽视。如果能够建立起一套坚实的监控_听云 监控宝

本科、硕士和博士有何区别?-程序员宅基地

文章浏览阅读927次。链接:https://www.zhihu.com/question/24963114编辑:深度学习与计算机视觉声明:仅做学术分享,侵删作者:安若素https://www.zhihu.co...

如何对webbrowser和IE编程(一)_vb webbrowser internetexplorer-程序员宅基地

文章浏览阅读536次。 如何对webbrowser和IE编程一、因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。IE的体系WebBrowser Host首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrows_vb webbrowser internetexplorer

传智教育与华为开发者联盟、天津经开区人社局达成鸿蒙生态人才共建合作_鸿蒙生态 天津-程序员宅基地

文章浏览阅读1.7k次,点赞17次,收藏17次。传智教育与华为开发者联盟、天津市经济技术开发区人社局举行了鸿蒙生态人才共建启动仪式_鸿蒙生态 天津

微信小程序点击实现隐藏和点击实现显示_微信小程序点击显示隐藏的-程序员宅基地

文章浏览阅读8.1k次。组件显示的方法:即是定义组件的表现形式display: none;1wxml文件: &lt;view &gt; &lt;button class="hide{{showView?'show':''}}" bindtap="onChangeShowState"&gt;{{showView?'隐藏':'显示'}}&lt;/button&gt; //?:即表示了一种选择关系 &lt;but..._微信小程序点击显示隐藏的

推荐文章

热门文章

相关标签