spring boot 2.0特性之profile与日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

profile

简介

profile提供了应用的隔离,使其在某种特定的环境下才能生效,任何的 @Component@Configuration能够被 @Profile标记限制其何时加载,如下代码所示:
@Configuration
@Profile("production")
public class ProductionConfiguration {

	// ...

}
通常情况下,spring可以使用 spring.profiles.active   Environment  去指定哪一个profile被激活。通常可以通过指定包含在apllication.properties配置中指定:代码如下:
pring.profiles.active=dev,hsqldb
也可以通过命令行的形式: --spring.profiles.active=dev,hsqldb

添加激活配置(active profiles)

spring.profiles.active  属性像其他属性一样,也提供了对应的优先级的顺序,优先级最高的获胜,可以通过在 application.properties 指定,然后在命名行替换。
有时候,通过添加active profile而不是替换他们更加有用。可以通过变量 spring.profiles.include 进行无条件的添加激活的变量。其对应的API也有添加对应的API的方式,查看 setAdditionalProfiles()  方法。例如:当使用如下配置的时候:
---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodmq
当使用 --spring.profiles.active=prod 进行激活的时候, proddb  与  prodmq  也将会被激活。

程序化设置

可以通过 SpringApplication.setAdditionalProfiles(…​) 方法在程序运行前进行设置

具体化配置文件

可以通过 @ConfigurationProperties 具体化其配置变量

日志

简介

spring boot内部使用的使   Commons Logging日志,但是其可以留下了潜在日志接口的实现。默认的配置包括   Java Util LoggingLog4J2 ,与 Logback,每一种情况下,都会被配置输出到控制台和可选的输入到文件。
默认情况下,如果使用“starter”, Logback  日志框架被使用,其他的相关的包也会包括,保证 Java Util Logging, Commons Logging, Log4J, or SLF4J也能正常工作。

日志格式

默认的日志输出格式如下:
2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
输出项:
  • 日志和时间,默认到毫秒
  • 日志等级ERRORWARNINFODEBUG, or TRACE.
  • 进程ID
  •  --- 是区分日志消息的开发
  • 线程名称:
  • 日志名称
  • 日志消息

日志等级调整

可以通过如下代码进行日志等级调整:
$ java -jar myapp.jar --debug

颜色代码输出

如果终端支持ASNI,颜色输出更加让其具有可读性,可以通过设置 spring.output.ansi.enabled 来支持。颜色代码是通过使用   %clr  来改变。例如 %clr(%5p),其颜色与日志等级的对照如下列表
  • 红色:FATAL,ERROR
  • 黄色:WARNINING
  • 绿色:INFO,debug,trace
也可以通过指定其颜色:如下代码: %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

文件输出

默认情况下,不不会写文件,可以通过在application.properties中设置 logging.file  或 logging.path 来指定输出位置。
默认情况下,输出的为log,error,warning等级的日志,并且当其大于10M的时候,会重新写。可以通过指定属性 logging.file.max-size  来改变默认大小。

日志等级

所有的日志系统都可以通过环境变量设置日志等级。其使用 ‘logging.level.*=LEVEL’  (其中level包括   TRACE, DEBUG, INFO, WARN, ERROR, FATAL, 或者 OFF )。其root可以通过 root  logger 进行配置,代码如下
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

个性化日志配置

可以在根路径或者是spring环境中通过 logging.config 来指定日志信息。也可以通过指定 org.springframework.boot.logging.LoggingSystem 的类来指定用于实现日志的具体类。根据不同的日志系统,如下的日志将会被应用:
日志系统 个性化配置文件
Logback
logback-spring.xmllogback-spring.groovylogback.xml, or logback.groovy
Log4j2
log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging)
logging.properties
(备注:1. 推荐使用带有 -spring  的配置 2. 在使用JDKlogging的时候,避免使用 executable jar执行
为了帮助个性化,spring环境提供了一些公共的系统变量:
spring环境 系统变量 描述
logging.exception-conversion-word
LOG_EXCEPTION_CONVERSION_WORD
当日志异常的时候使用
logging.file
LOG_FILE
如果被使用,将会作为默认的日志配置
logging.file.max-size
LOG_FILE_MAX_SIZE
最大的日志文件大小
 logging.path  LOG_PATH  日志路径
 logging.pattern.console  CONSOLE_LOG_PATTERN  在控制台的输出格式
 logging.pattern.file  FILE_LOG_PATTERN  指定其文件格式
 logging.pattern.level  LOG_LEVEL_PATTERN  输出日志的等级
 PID  PID  进程号
(备注:
    1. 如果想使用占位符,可以使用spring boot的语法,而不是其框架自身的语法:既使用“:”处理
    2. 可以通过配置 logging.pattern.level=user:%X{user} %5p 来打印调用用户的信息:代码运行结果后如下:
2015-09-30 12:30:04.031 user:someone INFO 22174 --- [  nio-8080-exec-0] demo.Controller
Handling authenticated request

logback的扩展

可以通过在logback-spring.xml中进行扩展,进而提供一些更加高级的功能。(备注:由于 logback.xml配置是加载太早,因此不能再里面扩展,只能通过logback-spring.xml进行扩展。不能通过log-backde的配置扫描进行配置,否则,会出错
01.特定环境配置
标签 <springProfile>  可以让你排除或包括基于触发的环境的一些配置。通过使用   <configuration>  的支持方式,使用name的方式指定要链接哪一个配置。对于多个链接的配置,可以使用“,”分隔,代码如下:
<springProfile name="staging">
	<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev, staging">
	<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
	<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
02. 环境属性
标签   <springProperty>  让你暴露 Spring  Environment  的属性供 Logback使用。当其要链接到application.properties里面的值的时候,非常有用。其作为一种标准的logback标签使用。你通过指定变量属性的来源   source   ,而不是直接指定值。你需要指定存储的范围(非local),如下代码所示:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
		defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
	<remoteHost>${fluentHost}</remoteHost>
	...
</appender>

 备注以上参考: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-profiles

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
22天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
64 5
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
48 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
13天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
27 1
|
18天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
31 2
|
2月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
60 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
29天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
38 1
|
2月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
76 2
|
2月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
39 4