Launcher通用启动器-日志配置指南

launcher统一了应用的日志路径以及日志格式,并且提供了零配置开箱即用的特性

Posted by guanyang on 2022-06-08
Words 1.3k and Reading Time 5 Minutes
Viewed Times

功能简介

launcher统一了应用的日志路径以及日志格式,并且提供了零配置开箱即用的特性。当用户有个性化日志需求时(例如:把部分特定的日志打印到指定目录上)也可以通过自定义日志片段来满足所述需求。

日志框架配置方式

launcher目前仅支持SpringBoot项目,请使用SpringBoot默认日志框架 org.springframework.boot:spring-boot-starter-logging,大多数情况下已经自带,无需手动配置。

不兼容的依赖

  • 仅支持Logback,如果整个依赖树中未找到 ch.qos.logback:logback-classic 会构建失败。
  • 如果发现依赖树中包含LOG4J的SLF4J实现 org.apache.logging.log4j:log4j-slf4j-impl 会构建失败。

个性化日志

launcher支持Logback中的File Inclusion特性,能够让用户自定义日志配置片段,以完成用户的个性化日志需求。

配置流程

创建日志配置片段 logback.snippet.xml
  • 创建 logback.snippet.xml 放在工程的resources目录下
配置日志片段

场景示例

  • 有个名为 DataPointer 的 Logger,现在用户想要将该 Logger 的日志打印到应用日志目录下的 point 子文件夹中。
  • 希望将该日志文件名修改为 服务名.point.log ,并且按天以及默认日志大小策略滚动。
  • 日志格式使用启动器的默认格式。

  • logback.snippet.xml 内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <included>

    <appender name="dataPointAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDir}/point/${launcher.app.name}.point.log</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <!-- rollover daily -->
    <fileNamePattern>${logDir}/point/${launcher.app.name}.%d{yyyy-MM-dd}.%i.point.log</fileNamePattern>
    <maxFileSize>${maxFileSize}</maxFileSize>
    <maxHistory>${maxHistory}</maxHistory>
    <totalSizeCap>${totalSizeCap}</totalSizeCap>
    </rollingPolicy>

    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <Pattern>${PATTERN}</Pattern>
    </encoder>
    </appender>

    <logger name="DataPointer" level="INFO" additivity="false">
    <appender-ref ref="dataPointAppender" />
    </logger>

    </included>

    日志片段中可以使用的内部变量

  • launcher.app.name: 服务名
  • logDir: 应用日志目录,该目录下有许多子文件夹以存放不同类型的日志文件,例如:bizgc 等等
  • PATTERN: launcher预设的基于统一日志规范的日志格式,通常使用在 appender > encoder > Pattern 元素中
  • maxFileSize: 最大文件大小,通常使用在 appender > rollingPolicy > maxFileSize 元素中,默认值:500MB
  • maxHistory: 最多保留日志数量,通常使用在 appender > rollingPolicy > maxHistory 元素中,默认值:15
  • totalSizeCap: 日志滚动策略的总大小,通常使用在 appender > rollingPolicy > totalSizeCap 元素中,默认值:50GB

修改日志配置的其它方式

通过 pom.xml 修改日志相关配置

  • 示例场景:某个业务的日志文件需要保留30天(默认是15天)
  • launcher支持在 pom.xml 中修改部分日志相关配置参数,配置方式如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <plugin>
    <groupId>org.gy.framework</groupId>
    <artifactId>launcher-maven-plugin</artifactId>
    <executions>
    <execution>
    <goals>
    <goal>launcher</goal>
    </goals>
    <configuration>
    <!-- launcher日志相关配置 start -->
    <logConf>
    <!-- 以数值均为默认值 -->
    <!-- 日志根级别 -->
    <rootLogLevel>INFO</rootLogLevel>

    <!-- 包名为org.gy.framework开头的日志级别 -->
    <logName>org.gy.framework</logName>
    <logLevel>INFO</logLevel>

    <!-- 日志最大文件大小 -->
    <maxFileSize>500MB</maxFileSize>

    <!-- 最大文件数量 -->
    <maxHistory>15</maxHistory>

    <!-- 日志总大小 -->
    <totalSizeCap>50GB</totalSizeCap>
    </logConf>
    <!-- launcher日志相关配置 end -->
    </configuration>
    </execution>
    </executions>
    </plugin>

通过JVM参数修改日志相关配置

  • 示例场景:应用因为某种故障启动不起来,并且应用部署在容器环境无法手动修改配置文件,想打印DEBUG日志但是又不想重新构建镜像。
使用 Spring 支持的 JVM 参数 logging.level 进行配置(推荐)
使用 launcher 内建方式配置日志级别(在上述Spring方式不生效时使用此方法进行配置)
  • 用户可以在启动应用时通过JVM参数修改应用的 rootLogLevel 以及 logLevel 日志级别
  • launcher.app.log.name: 自定义 Logger的开头
  • launcher.app.log.level: 自定义 Logger的级别
  • launcher.app.log.level.root: 其它 Logger
  • 示例: ./launcher.sh start -jo ‘-Dlauncher.app.log.level.root=WARN’

If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !

...

...

00:00
00:00