更新时间:2025-01-09 GMT+08:00
分享

日志配置

spring-boot-starter-huawei中默认使用slf4j作为日志门面,log4j2作为日志实现框架。

当项目中的依赖可能存在有关logback日志框架的时候需要将其排除,否则可能会有spring-boot-starter-huawei中配置的slf4j(使用log4j-slf4j-impl桥接slf4j的日志)的日志框架相冲突。

org.springframework.boot:spring-boot-starter-logging使用的也是logback的日志框架,所以当项目的依赖中存在对spring-boot-starter-logging的依赖时需要将其排除,例如:

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.0</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

对于开发时简单的日志配置,直接在application.yml中使用yml方式进行配置,该配置简单易于理解;但也只能进行简单的配置,滚动策略无法配置。

  • 在application.yml中配置简单的日志。
    #日志配置
    logging:
      charset:
        file: UTF-8
        console: UTF-8
      file:
        name: /opt/cloud/log/{服务名}/{服务名}.log #日志文件的位置及名称
      pattern:
        file: "[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%X{apm-traceid}] [%X{apm-gtraceid}] [%logger{15}] - [%msg]%n" #日志记录格式
        console: "[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%X{apm-traceid}] [%X{apm-gtraceid}] [%logger{15}] - [%msg]%n" #日志记录格式
      level:
        root: INFO
        org.mybatis: DEBUG
        org.springfrmework: INFO
        com.example.demo.controller: INFO

    以上日志配置适合开发时本地配置,较为简单。当以上配置无法满足要求的时候,可以使用单独的日志配置文件来进行日志配置。

  • 使用yml文件进行日志配置
    #日志配置
    #配置log4j2日志文件时使用yml方式配置,在项目资源路径下添加log4j2.yml文件(或在application.yml中使用logging.config=log4j2-xxx.yml指定位置)配置内容如下示例:
    
    Configuration:
      status: warn
      Properties: # 变量定义
        Property: #
    	  - name: microservice		### DONE: 增加配置
    		value: default
          - name: log.path #日志路径,推荐配置:此路径
            value: /opt/cloud/log/${microservice}
    	  - name: log.pattern #日志格式,推荐此格式
            value: "[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%X{apm-traceid}] [%X{apm-gtraceid}] [%logger{15}] - [%msg]%n"	###DONE LC:paas规范 刷新减掉 timestamp , 与apm集成
      Appenders:
        Console:  # 输出到控制台
          name: CONSOLE
          target: SYSTEM_OUT
          ThresholdFilter: #过滤条件
            level: info		###DONE: LC:Console只输出info级别就即可, 详细debug日志记录到文件
            onMatch: ACCEPT
            onMismatch: DENY
          PatternLayout:
            pattern: "${log.pattern}" # 控制台输出格式
        RollingFile: # 输出到文件
          - name: ROLLING_FILE
            ignoreExceptions: false
            fileName: "${log.path}/${microservice}.log" #日志文件名称		###DONE LC: ${}} demo?  应用名?
            filePattern: "${log.path}/${microservice}-%d{yyyy-MM-dd}.%i.zip" #压缩后日志文件名称			###DONE 看规范是否要更新建议
            append: true
            PatternLayout:
              pattern: "${log.pattern}" # 文件输出格式
            Policies:
    #          TimeBasedTriggeringPolicy:  #按天分类
    #            modulate: true
    #            interval: 1
              SizeBasedTriggeringPolicy: #按大小分类
                size: 100MB #大小,超过此大小后压缩打包日志文件,单位:KB,MB,GB			###DONE -> 刷新规范是50MB
            DefaultRolloverStrategy: #最大保存文件个数
              max: 100		###DONE -> LC: 刷新规范是40 -> 100
              Delete: # 删除策略
    		    basePath: ${log.path} # 删除基本路径
                maxDepth: 2 # 目录检索深度,当前${log.path}指定的目录深度为0
                IfFileName: # 匹配文件名称删除
    		  glob: "*${microservice}-*zip" # 文件名称  			###DONE LC: demo被hardcode了
                  IfLastModified: # 删除文件条件定义
                    age: 7d # 7天或以上
                    ifAny: # 附件的一些条件,可不定义
                      IfAccumulatedFileSize: # 文件大小,当前满足age设定的条件时,并且达到该条件则删除(保留10G过期文件)
                        exceeds: 10GB
                      IfAccumulatedFileCount: # 文件个数,当前满足age设定的条件时,并且达到该条件则删除(保留100个过期文件)
                        exceeds: 100
      Loggers:
        Root:
          level: info
          AppenderRef:
            - ref: CONSOLE
            - ref: ROLLING_FILE
        Logger:		
          - name: com.huaweicloud.sample.core.controller
            level: debug
            additivity: false # 是否向父logger传递,否:false
            AppenderRef:
              - ref: CONSOLE
              - ref: ROLLING_FILE
  • 使用xml文件进行日志配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!--配置log4j2日志文件时使用xml方式配置,在项目资源路径下添加log4j2.xml文件(或在application.yml中使用logging.config=log4j2-xxx.xml指定位置)配置内容如下示例:-->
    <Configuration status="debug" strict="true" name="XMLConfigTest" packages="org.apache.logging.log4j.test">
      <Properties>
        <Property name="microservice">default</Property>
        <Property name="log.path">/opt/cloud/log/${microservice}</Property>
        <Property name="log.pattern">[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%X{apm-traceid}] [%X{apm-gtraceid}] [%logger{15}] - [%msg]%n</Property>
      </Properties>
    
      <Appenders>
        <Appender type="Console" name="CONSOLE">
          <Layout type="PatternLayout" pattern="${log.pattern}" />
          <Filters>
            <Filter type="ThresholdFilter" level="info" onMatch="ACCEPT" onMismatch="DENY" />
          </Filters>
        </Appender>
        <RollingFile name="ROLLING_FILE">
          <FileName>${log.path}/${microservice}.log</FileName>
          <FilePattern>${log.path}/${microservice}-%d{yyyy-MM-dd}.%i.zip</FilePattern>
          <Layout type="PatternLayout">
            <Pattern>${log.pattern}</Pattern>
          </Layout>
          <Policies>
            <SizeBasedTriggeringPolicy size="100MB" />
          </Policies>
          <DefaultRolloverStrategy max="100">
    		<Delete basePath="${log.path}" maxDepth="2">
    	  <IfFileName glob="*${microservice}-*zip">
    		<IfLastModified age="7d">
                  <IfAny>
                    <IfAccumulatedFileSize exceeds="10GB" />
                    <IfAccumulatedFileCount exceeds="100" />
                  </IfAny>
                </IfLastModified>
              </IfFileName>
            </Delete>
          </DefaultRolloverStrategy>
        </RollingFile>
      </Appenders>
    
      <Loggers>
        <Root level="info">
          <AppenderRef ref="CONSOLE" />
          <AppenderRef ref="ROLLING_FILE" />
        </Root>
        <Logger name="org.mybatis" level="debug" additivity="false">
          <AppenderRef ref="CONSOLE" />
          <AppenderRef ref="ROLLING_FILE" />
        </Logger>
        <Logger name="com.example.demo.controller" level="info" additivity="false">
          <AppenderRef ref="CONSOLE" />
          <AppenderRef ref="ROLLING_FILE" />
        </Logger>
      </Loggers>
    
    </Configuration>

更多配置,请参考log4j2官方文档配置。中文文档参考: https://www.docs4dev.com/docs/zh/log4j2/2.x/all/manual-configuration.html

相关文档