3.4 日志采集-gRPC导出Logback日志
一、日志采集
方便系统排查错误以及日志信息筛选
引入坐标
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.15.0</version> </dependency>添加相关配置:
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <springProperty name="appName" source="spring.application.name"/> <springProperty name="logFile" source="logging.file.name"/> <springProperty name="logLevel" source="logging.level.root" defaultValue="info"/> <springProperty name="maxFileSize" source="logging.file.max-size" defaultValue="500MB"/> <springProperty name="maxHistory" source="logging.file.max-history" defaultValue="60"/> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${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}}"/> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> <!-- 默认输出到控制台 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 文件输出 --> <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${logFile}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>${maxFileSize}</maxFileSize> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> </appender> <!-- skywalking 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- 日志的格式化 --> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"> <Pattern>[%tid]-${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-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> </layout> </encoder> </appender> <!-- skywalking 异步追加控制台输出 --> <appender name="async-console" class="ch.qos.logback.classic.AsyncAppender"> <!-- 丢弃阈值,当队列满时是否丢弃日志事件 --> <discardingThreshold>0</discardingThreshold> <!-- 队列大小,决定可缓存的日志事件数量 --> <queueSize>1024</queueSize> <!-- 是否在队列已满时阻塞日志线程 --> <neverBlock>true</neverBlock> <!-- 是否包含调用者的信息 --> <includeCallerData>true</includeCallerData> <!-- 异步传递日志事件到名为"console"的附加器 --> <appender-ref ref="console"/> </appender> <!-- skywalking 服务端接-格式1 --> <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"> <Pattern> { "app_name": "${appName}", "TID": "%X{tid}", "time": "%date{yyyy-MM-dd HH:mm:ss.SSS}", "level": "%level", "thread": "%thread", "class": "%class", "method":"%method", "line": "%line", "message": "%message", "stack_trace": "%exception" } </Pattern> </layout> </encoder> </appender> <!-- skywalking 服务端接-格式2 --> <!-- <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">--> <!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">--> <!-- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">--> <!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>--> <!-- </layout>--> <!-- </encoder>--> <!-- </appender>--> <!-- 不同环境使用不同的日志方案 --> <springProfile name="dev"> <root level="${logLevel}"> <!-- 正常控制台输出 --> <!-- <appender-ref ref="consoleAppender"/>--> <!-- skywalking 控制台输出 --> <appender-ref ref="console"/> <!-- skywalking 接收 --> <appender-ref ref="grpc-log"/> </root> </springProfile> <springProfile name="pro"> <root level="${logLevel}"> <!-- 文件输出 --> <!-- <appender-ref ref="fileAppender"/>--> <!-- skywalking 控制台输出 --> <appender-ref ref="console"/> <!-- skywalking 接收 --> <appender-ref ref="grpc-log"/> </root> </springProfile> </configuration>备注:为了区分,建议命名为logback-spring.xml
然后再application.yml中进行配置:
Last updated