日志配置
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。