前言
Logback是SpringBoot内置的日志处理框架
sleuth 可以解决分布式系统的追踪问题
使用步骤
1.引入库
代码如下(示例):
<!--logback配置-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<!--引入sleuth日志链路追踪系统-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
2.application.yml 中的配置:
logging:
level:
root: info
config: classpath:logging.xml
file:
path: ./logs/core1/
name: coreApplication.log
3.xml配置文件
在resource文件夹下新建logging.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration debug="false">
<!--1.从yml中获取配置信息
logging.path:日志路径
logging.level:日志级别
spring.application.name:应用名称
logging.filename:日志名称
-->
<springProperty scope="context" name="path" source="logging.file.path"/>
<springProperty scope="context" name="level" source="logging.level"/>
<springProperty scope="context" name="spring.application.name" source="spring.application.name"
defaultValue="loan-mgmt"/>
<springProperty scope="context" name="filename" source="logging.file.name"/>
<jmxConfigurator/>
<conversionRule conversionWord="short" converterClass="com.asd.logging.ShortLoggerConverter"/>
<conversionRule conversionWord="count" converterClass="com.asd.logging.CountingConverter"/>
<!-- 2.操作系统标准输出,再用java -jar启动时指定>> 输出到某一位置 -->
<!-- 2.1 其中TraceId为某一请求在分布式系统中的唯一Id,SpanId为在分布式中某一节点的唯一Id-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
- [%thread] %logger{50}#%M - %msg%n
</pattern>
</layout>
</appender>
<!-- 3.全日志记录.按月份文件夹将日志分离,大于200M时进行切割压缩-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/${filename}-now.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-now-%d{yyyyMMdd}_%i.zip</fileNamePattern>
<!-- each file should be at most 200MB, keep 183 days worth of history, but at most 50GB -->
<maxFileSize>200MB</maxFileSize>
<maxHistory>183</maxHistory>
<totalSizeCap>50GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %5level -[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
- [%thread] %logger{50}#%M - %msg%n
</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!--4.error错误级别日志记录-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/${filename}-error-now.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-error-%d{yyyyMMdd}_%i.zip
</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>183</maxHistory>
<totalSizeCap>50GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
- [%thread] %logger{50}#%M - %msg%n
</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!--5.其他sql操作日志记录-->
<appender name="bizAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/${filename}-Biz.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${path}/%d{yyyyMM,aux}/${filename}-Biz-%d{yyyyMMdd}_%i.zip</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>183</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %5level - [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
- [%thread] %logger{50}#%M - %msg%n
</pattern>
</encoder>
</appender>
<!--7.logger有一个配置addtivity="true" 默认就是true(root标签设置为info级别也会打印debugger日志),
标识向上级传递日志(INFO是DEBUG的上级)。只有显示指定为false时,才不会向上级输出(才不会追加到"FILE"中去)。-->
<!--针对sql 输出debugger日志-->
<logger name="com.asd.common.internet.mapper" additivity="false">
<level value="debug"/>
<appender-ref ref="bizAppender"/>
</logger>
<!--9.1测试环境输出到console-->
<springProfile name="default,bridge-dev,dev,test,uat,sit,bat,ops,sit2,sit3,dev-old">
<root level="${level}">
<!-- <root level="${level}">-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="fileErrorLog"/>
</root>
</springProfile>
<!--9.2生产环境不输出到console-->
<springProfile name="pre,prd,prod">
<root level="${level}">
<appender-ref ref="FILE"/>
<appender-ref ref="fileErrorLog"/>
</root>
</springProfile>
</configuration>