关闭

52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】

86人阅读 评论(0) 收藏 举报
分类:

在上一章节中我们介绍了,仅通过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

0
0
查看评论

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

Spring Boot中对log4j进行多环境不同日志级别的控制  2016-05-19  Spring Boot 被围观 1793 次 之前介绍了在《Spring boot中使用log4j记录日志》,仅通过log4j.pr...
  • baochanghong
  • baochanghong
  • 2017-01-06 10:54
  • 288

52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】(

在上一章节中我们介绍了,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑log4j.pr...
  • linxingliang
  • linxingliang
  • 2016-08-26 09:09
  • 2195

112. Spring Boot 定时任务升级篇【从零开始学Spring Boot】

【原创文章,转载请注明出处】 【本篇博客,有配套视频,视频地址:《Spring Boot定时任务》,公众号中点击下面的阅读原文,视频中讲解的更详细】 需求缘起:在之前的一篇文章中就介绍过《Spring Boot定时任务》,在录制这节视频的时候,发现太简单了,对于初学者来说的话,还是有点困难。本节博客...
  • zmken497300
  • zmken497300
  • 2017-03-28 16:13
  • 627

springboot动态修改系统日志级别

spring1.5.X版本引入的一个新的控制端点:/loggers,该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单,它依然延续了Spring Boot自动化配置的实现,所以只需要在引入了spring-boot-starter-actuator依赖的条件下...
  • Eacter
  • Eacter
  • 2017-09-12 18:36
  • 1014

spring boot log4j多环境不同日志级别控制

在上一章节中我们介绍了,仅通过log4j-spring.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑l...
  • u012100371
  • u012100371
  • 2017-09-26 08:59
  • 148

1. spring boot起步之Hello World【从零开始学Spring Boot】

1.1 介绍        自从structs2出现上次的漏洞以后,对spring的关注度开始越来越浓。        以前spring开发需要配置一大堆的xml,后台spring...
  • linxingliang
  • linxingliang
  • 2016-06-03 23:07
  • 15581

springboot-笔记-日志-包级别日志level设置

指定工程路径下不同包内的日志级别(application.properties) #org.springframework.web log level logging.level.org.springframework.web=DEBUG #owner project log level lo...
  • gjtyoulanyi
  • gjtyoulanyi
  • 2017-03-31 15:39
  • 2028

spring boot 中logback多环境配置

spring boot 配置logbackspring boot自带了log打印功能,使用的是Commons logging 具体可以参考spring boot log 因此,我们只需要在resources中添加一个logback-spring.xml的logback的配置文件就可以实现正常的日志...
  • m0_37895333
  • m0_37895333
  • 2017-05-18 06:54
  • 2783

Spring boot中使用log4j记录日志

之前在Spring Boot日志管理一文中主要介绍了Spring Boot中默认日志工具(logback)的基本配置内容。对于很多习惯使用log4j的开发者,Spring Boot依然可以很好的支持,只是需要做一些小小的配置功能。 引入log4j依赖 在创建Spring Boot工程时,...
  • moshenglv
  • moshenglv
  • 2016-08-25 08:56
  • 2799

spring boot 不同的环境使用不同的配置

spring boot中,可以通过在application.yml配置文件中,配置多个不同的profile,实现在不同的环境(比如开发、测试和生产环境)使用不同的配置变量。
  • ClementAD
  • ClementAD
  • 2016-06-28 17:42
  • 20644
    个人资料
    • 访问:80442次
    • 积分:1520
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:388篇
    • 译文:0篇
    • 评论:11条
    最新评论