执子之手

与子偕老


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

迁移到SpringBoot 08 - 日志

时间: 2018-07-13   |   分类: 开发     |   阅读: 1461 字 ~3分钟   |   访问: 0

SpringBoot默认的日志配置通常来说足够满足要求:日志记录到控制台,也能够配置日志的级别,样式等等。但是其也有些不足:没有了之前logback提供的热更新日志配置的功能。

logback有个非常好用的配置是“scan”,当“scan=true”的时候默认一分钟刷新一次配置。这样可以自动更新系统的日志级别。对于在线系统可以方便修改日志级别获取更加详细的日志,方便定位错误。这样可以保证服务不中断的情况下调整日志级别获取更多日志信息。但是默认的SpringBoot配置中不支持这种选项。

1. 多配置支持

改造方案是使用logback。但是有一点需要注意的是不能够使用通常用的 logback.xml这个文件名来进行配置。因为这个文件名被logback自动扫描,无法做到不同环境不同配置。可以使用logging.config这个配置项,来进行环境不同的设定:

在application.yaml中,如下配置:

1# Set logback configuration file
2logging:
3  config: classpath:logback-default.xml

2. 配置文件

下面是最后使用的配置文件的一个例子,可以供以后项目参考。

  1<?xml version="1.0" encoding="UTF-8"?>
  2
  3<configuration debug="false" scan="true" >
  4    <!-- 定义全局的变量 //-->
  5    <property name="cap.logger.level" value="info"/>
  6    <property name="cap.logger.level.server" value="debug"/>
  7    <property name="cap.logger.outputdir" value="/opt/cap/cap-uid-logs"/>
  8
  9    <!-- 定义一些converionRule -->
 10    <!-- clr 定义色彩 -->
 11    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
 12    <!-- wex 异常处理用的 -->
 13    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
 14    <!-- wex 异常处理用的 -->
 15    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
 16
 17    <jmxConfigurator />
 18
 19    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
 20        <resetJUL>true</resetJUL>
 21    </contextListener>
 22
 23    <!-- Standard syslog/console used by root appenders -->
 24    <appender name="syslog" class="ch.qos.logback.classic.net.SyslogAppender">
 25        <syslogHost>${PUBLIC_IP}</syslogHost>
 26        <facility>LOCAL7</facility>
 27        <suffixPattern>[%-5level] [%logger{0}] - %msg%n</suffixPattern>
 28    </appender>
 29
 30    <!-- console输出,有色彩支持的 //-->
 31    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 32 		<!--<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
 33            <!--<pattern>[%date] [%-5level] [%logger{0}] - %msg%n</pattern>-->
 34        <!--</encoder>-->
 35        <encoder>
 36            <pattern>${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</pattern>
 37        </encoder>
 38    </appender>
 39
 40    <!-- accessFile。使用标准的springboot格式输出,方便阅读。 //-->
 41    <appender name="accessFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 42        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 43            <!-- daily rollover -->
 44            <fileNamePattern>${cap.logger.outputdir}/access_%d{yyyy_MM_dd}.log</fileNamePattern>
 45            <!-- keep 30 days' worth of history capped at 3GB total size -->
 46            <maxHistory>90</maxHistory>
 47        </rollingPolicy>
 48        <append>true</append>
 49        <encoder>
 50            <pattern>${FILE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</pattern>
 51        </encoder>
 52    </appender>
 53
 54    <!-- 使用JSON格式。方便管理平台分析。Use JSONLayout, UID Admin may analysis it //-->
 55    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 56        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 57            <level>ERROR</level>
 58        </filter>
 59        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 60            <!-- daily rollover -->
 61            <fileNamePattern>${cap.logger.outputdir}/error_%d{yyyy_MM_dd}.log</fileNamePattern>
 62            <!-- keep 30 days' worth of history capped at 3GB total size -->
 63            <maxHistory>90</maxHistory>
 64        </rollingPolicy>
 65        <append>true</append>
 66        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
 67            <layout class="com.eveus.common.logger.JSONLayout" />
 68        </encoder>
 69    </appender>
 70
 71    <!-- 使用JSON格式。方便管理平台分析。Use JSONLayout, UID Admin may analysis it //-->
 72    <appender name="kafkaErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 73        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 74            <level>ERROR</level>
 75        </filter>
 76        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 77            <!-- daily rollover -->
 78            <fileNamePattern>${cap.logger.outputdir}/kafka_error_%d{yyyy_MM}.log</fileNamePattern>
 79            <!-- keep 30 days' worth of history capped at 3GB total size -->
 80            <maxHistory>90</maxHistory>
 81        </rollingPolicy>
 82        <append>true</append>
 83        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
 84            <layout class="com.eveus.common.logger.JSONLayout" />
 85        </encoder>
 86    </appender>
 87
 88    <!-- third party library logger level -->
 89    <logger name="org.springframework" level="${cap.logger.level}" />
 90    <logger name="org.apache.cxf" level="${cap.logger.level}" />
 91    <logger name="ch.qos.logback" level="${cap.logger.level}" />
 92    <logger name="com.notnoop.apns" level="${cap.logger.level}" />
 93    <logger name="org.springframework.security" level="${cap.logger.level}"/>
 94    <logger name="org.springframework.transaction" level="${cap.logger.level}" />
 95    <logger name="org.springframework.jdbc" level="${cap.logger.level}" />
 96
 97    <!-- UID server logger -->
 98    <!-- change level to debug to show sql -->
 99    <logger name="com.eveus.cloudauth.dao" level="info"/>
100    <!-- LoggerAspect, Used for API & Service logging -->
101    <logger name="com.eveus.common.logger" level="debug"/>
102    <!-- KafkaConsumer -->
103    <logger name="com.eveus.common.kafka" level="info"/>
104    <!-- AccessLogger -->
105    <logger name="com.eveus.cloudauth.service.impl.jms.AccessLogService" level="info"/>
106
107    <!-- The following needs detail log in development stage -->
108    <logger name="com.eveus.cloudauth.api" level="${cap.logger.level.server}"/>
109    <logger name="com.eveus.cloudauth.service" level="${cap.logger.level.server}"/>
110    <logger name="com.eveus" level="${cap.logger.level.server}" />
111
112    <!-- kafka error logger -->
113    <logger name="com.eveus.common.kafka.KafkaProducer" level="error">
114        <appender-ref ref="kafkaErrorFile"/>
115    </logger>
116
117    <root level="${cap.logger.level}">
118        <appender-ref ref="console"/>
119        <appender-ref ref="accessFile"/>
120        <appender-ref ref="errorFile"/>
121    </root>
122</configuration>

3. 部署方式

SpringBoot项目打包的时候会把配置文件一同打包到jar文件中。 这样修改logback配置文件会比较麻烦。所以在部署的时候会把配置文件解压出来,和jar文件放到同一个目录中。这是利用了SpringBoot配置文件加载的一个特性。官方文档介绍如下:

SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment(SpringBoot会按照顺序从下面的路径中加载配置文件):

  • A /config subdirectory of the current directory. (当前目录内的/config目录)
  • The current directory (当前目录)
  • A classpath /config package (classpath中的/config文件夹)
  • The classpath root (classpath根目录) The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).

利用这个特性,在部署的时候将配置文件解压出来,放到当前目录下(和jar文件统计目录),这样它的优先级高于在jar包中的配置文件。

最后还需要在启动命令中增加配置,指定logback的配置文件,方法是指定logging.config这个Java环境变量:

1-Dspring.profiles.active=chanpayprd -Dlogging.config=file:/opt/cap/cap-uid/logback-chanpayprd.xml

附录、参考资料

  • USING YAML IN SPRING BOOT TO CONFIGURE LOGBACK
#Spring# #Springboot#
iOS证书及推送相关概念
迁移到SpringBoot 07 - Redis发布订阅机制
  • 文章目录
  • 站点概览
Orchidflower

Orchidflower

Do one thing at a time, and do well.

77 日志
6 分类
84 标签
GitHub 知乎 OSC 豆瓣
  • 1. 多配置支持
  • 2. 配置文件
  • 3. 部署方式
  • 附录、参考资料
© 2009 - 2024 执子之手
Powered by - Hugo v0.113.0
Theme by - NexT
ICP - 鲁ICP备17006463号-1
0%