筱进GG的gravatar头像
筱进GG2018-05-25 17:15:51
Spring Boot之对log4j进行多环境不同日志级别的控制

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

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

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

我们开始尝试配置一下:

引用的pom文件信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.cicoding</groupId>
	<artifactId>springboot-log</artifactId>
	<version>1.0.0</version>
	<packaging>jar</packaging>

	<name>springboot-log</name>
	<description>Spring Boot project</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.3.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

配置不同级别的配置文件

application-dev.properties
logging.level.com.cicoding=INFO
application-prod.properties
logging.level.com.cicoding=INFO
application-test.properties
logging.level.com.cicoding=DEBUG
application.properties
spring.profiles.active=dev
log4j.properties
# LOG4J配置
log4j.rootCategory=INFO, stdout, file, errorfile
log4j.category.com.cicoding=${logging.level.com.cicoding}, cifile
log4j.logger.error=errorfile

# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# root日志输出
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.file=logs/all.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# error日志输出
log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.file=logs/error.log
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

# com.cicoding下的日志输出
log4j.appender.cifile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.cifile.file=logs/my.log
log4j.appender.cifile.DatePattern='.'yyyy-MM-dd
log4j.appender.cifile.layout=org.apache.log4j.PatternLayout
log4j.appender.cifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n

测试类编写:

package com.cicoding;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ApplicationTests {

	private Logger logger = Logger.getLogger(getClass());

	@Test
	public void test() throws Exception {
		logger.info("输出info");
		logger.debug("输出debug");
		logger.error("输出error");
	}

}

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

使用prod的就需要:

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

使用dev的就需要:

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

这样就完成了;

 


打赏

已有1人打赏

最代码官方的gravatar头像

分享到:

最近浏览
wl2301821 LV31月18日
星星星星星星
莫灬嚣张 LV52018年12月20日
月亮星星
予天空 LV22018年11月22日
星星星星
MartinKing2018年11月21日
暂无贡献等级
chenglei1314 LV52018年11月14日
月亮星星
986871510 LV112018年11月9日
月亮月亮星星星星星星
zhoujunyu LV122018年11月7日
月亮月亮月亮
brights123 LV32018年9月27日
星星星星星星
hjw_java_1 LV22018年8月22日
星星星星
201807312018年7月31日
暂无贡献等级
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友
  • 农业农村部2017年返乡下乡双创人员达740万人 2019-04-24
  • A站受黑客攻击:近千万条用户数据外泄 涉ID及密码等 2019-03-29
  • 语文水平太差,直通通的转不弯来,又怎么表现逻辑大师的水平,忽悠成为自我暴露 2019-03-25
  • 亚冠-曾诚神扑救主 中超德比权健主场0-0恒大 2019-03-25
  • 看好啦!是时候表演真正的技术了 2019-03-16
  • 楼市下半年或持续降温 房地产长效机制加速推进 2019-03-16
  • “世界杯时间”,以独特方式展现中国元素 2019-01-11
  • 香港迪士尼推“无现金”体验便利游客 2019-01-11
  • 华媒:荷兰超市提倡减少使用一次性塑料制品 2018-07-13
  • 抓住党的建设着力点,焕发全党蓬勃活力  2018-07-12
  • 湖州市从细从实依法治路 2018-07-12
  • 【新时代 新作为 新篇章】“煤老大”渐行渐远 新动能清风徐来 2018-07-11
  • 西部网(陕西新闻网)www.cnwest.com 2018-07-11
  • 平凡人生闪耀璀璨的生命光华——“中国网事·感动2017”颁奖典礼侧记 2018-07-10
  • 为什么截留信马克的帖子?这还有摆事实讲道理存在吗? 2018-07-10
  • 479| 227| 495| 310| 924| 580| 522| 481| 174| 149|