不学无数——SpringBoot入门IV

SpringBoot

1.Profiles

Spring Profiles能够在不同的环境中使不同的应用配置生效。@Component和@Configuration两个注解都能够通过@Profiles来标记。下面是例子:

@Configuration
@Profile("buxuewushu")
public class ProductionConfiguration {

    // ...

}

在配置文件中可以通过spring.profiles.active这个变量来控制哪个Profiles生效。例如,可以在application.properties配置文件中配置如下:

spring.profiles.active=buxuewushu1,buxuewushu --即通过@Profiles注解标记的名为buxuewushu和buxuewushu1的文件生效

当然也可以通过命令行的形式进行配置:--spring.profiles.active= buxuewushu1, buxuewushu

1.1在代码中配置

在启动文件运行之前可以通过SpringApplication设置需要使哪一个配置生效,SpringApplication.setAdditionalProfiles(…​),也可以通过Spring的ConfigurableEnvironment接口来配置。

2.日志

SpringBoot使用 Commons Logging作为内部的日志门面,但是也提供了一系列的接口来实现扩展。默认的日志配置有,Java Util LoggingLog4J2和[Logback] (https://commons.apache.org/proper/commons-logging/),在这每一种的实现下,都能通过配置来实现针对于哪一些日志的输出。

2.1日志的格式

SpringBoot默认的日志输出格式如下所示,默认输出级别是INFO。默认使用的是Logback进行记录日志的。

2018-07-20 19:11:40.046  INFO 21758 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@db57326: startup date [Fri Jul 20 19:11:38 CST 2018]; root of context hierarchy
2018-07-20 19:11:40.093  INFO 21758 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String com.example.FirstSpringBoot.FirstSpringBootApplication.home()
2018-07-20 19:11:40.097  INFO 21758 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-07-20 19:11:40.097  INFO 21758 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
  • 时间:非常精确的时间,并且是根据时间进行排序的输出顺序。
  • 日志级别:ERROR,WARN,INFO,DEBUG,TRANCE
  • 进程ID
  • 通过---进行分割,右边为实际的日志输出内容
  • 线程名
  • 日志名称:通常是源类的名称
  • 日志的内容

2.2调整日志级别

SpringBoot默认的日志级别是INFO,如果想打印其他级别的日志的话可以通过配置。日志级别的顺序是ERROR>WARN>INFO>DEBUG>TRANCE.第一种办法是通过在启动的时候进行参数的配置--debug。

$ java -jar myapp.jar --debug

当然也可以通过配置文件的形式进行调整级别。debug=true,即输出为DEBUG级别的日志信息。

2.3在文件中记录日志

默认情况下,SpringBoot仅仅在控制台中打印日志,不会将日志记录在文件中。如果想将日志输出在文件中的话,那么可以在配置文件中配置文件的路径。logging.file或者logging.path.下面介绍logging.file和logging.path的区别。

logging.file logging.path 例子 描述
none none none 仅仅在控制台中输出日志
文件名 none buxuewushu.log 会在项目的根目录下生成一个buxuewushu.log来记录日志
none 文件夹的名字 ./logs 会在项目的根目录中生成一个logs文件夹,logs文件下会生成默认的spring.log来记录日志

当日志文件记录的数据达到一定量时,SpringBoot会将此文件进行压缩为.gz的压缩文件。SpringBoot默认的大小为10M。当然这个大小也可以通过logging.file.max-size进行配置,但是必须得带单位。

2.4自定义日志配置

许多的日志系统能够被相应的配置文件所配置,或者通过在application.properties中配置Spring的环境变量进行配置logging.config。

可以通过org.springframework.boot.logging.LoggingSystem的系统变量的设置从而使用特定的日志系统,系统日志的value值应该是日志实现的全路径名。

由于日志的加载是在ApplicationContext创建之前的,所以不能通过@PropertySources和@Configuration进行配置。唯一的配置方式就是在系统的环境变量中。

不同的日志系统所对应的配置文件如下:

日志名 文件名
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

Java Util Logging在可执行jar包运行时,可能会造成类加载的问题,所以尽可能避免在jar包执行时使用Java Util Logging

为了更好配置化,一些在properties中的配置被转化为了配置在系统中的变量。对应关系如下:

Spring配置变量 系统变量 描述
logging.exception-conversion-word LOG_EXCEPTION_CONVERSION_WORD 记录异常时使用的转换字
logging.file LOG_FILE 用于默认日志配置在哪个文件中
logging.path LOG_PATH 用于默认日志配置文件夹下
logging.file.max-size LOG_FILE_MAX_SIZE 日志文件中支持的最大容量
logging.file.max-history LOG_FILE_MAX_HISTORY 最大的已经被压缩的文件的数量
logging.pattern.console CONSOLE_LOG_PATTERN 在控制台上使用的日志模式
PID PID 当前的进程ID(如果可能,还没有被定义为OS环境变量时发现)

2.5 Logback的扩展

SpringBoot为Logback的可扩展性提供了许多的帮助。能够在logback-spring.xml文件中进行配置想要扩展的内容。

由于logback.xml文件的加载时间太早了,所以不能将扩展的内容配置在logback.xml中。

通常在开发过程中,我们根据不同的环境进行配置不同的日志级别。所以在配置文件中可以通过<springProfile>标签进行有选择的使具体哪一步分生效。例子如下,在logback-spring.xml进行配置

--想要的配置的具体内容在<springProfile>标签中进行编写
<springProfile name="staging">
    <!-- 配置staging生效 -->
</springProfile>

<springProfile name="dev | staging">
    <!-- 配置dev或者staging生效 -->
</springProfile>

<springProfile name="!production">
    <!-- 配置除了production之外的生效 -->
</springProfile>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容