服务热线
135-6963-3175
主要两点:
可实现链路id附加到我们的log输出业务日志中。
可实现日志自动收集通过grpc方式上传oap server。
官方默认支持三种日志框架。需要8.4版本。
1、log4j
依赖引入
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency>配置 log4j.properties
log4j.appender.CONSOLE.layout=TraceIdPatternLayout # 设置日志输出格式
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n2、log4j2
依赖引入
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
<version>${skywalking.version}</version>
</dependency>配置 log4j2.xml
<Configuration status="debug">
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
</Console>
<!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
<GRPCLogClientAppender name="grpc-log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</GRPCLogClientAppender>
</Appenders>
<Loggers>
<logger name="com.a.eye.skywalking.ui" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="grpc-log"/>
</logger>
<logger name="org.apache.kafka" level="INFO"></logger>
<logger name="org.apache.skywalking.apm.dependencies" level="INFO"></logger>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="grpc-log"/>
</Root>
</Loggers>
</Configuration>3、Logback
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency>配置 logback.xml
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" 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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%mdc] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<! -- 配置异步记录 AsyncAppender -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="STDOUT"/>
</appender>
<!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
<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.TraceIdPatternLogbackLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
</layout>
</encoder>
</appender>
<!--系统操作日志-->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ASYNC"/>
<appender-ref ref="grpc-log"/>
</root>
</configuration>你要输出日志到文件中,grpc是利用本地日志去上传的。如果是使用GRPCLogClientAppender, 需要在agent的config/agent.config文件中加上grpc的配置,否则会默认访问127.0.0.1:11800的端口上传日志,导致远程日志上传失败。
gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器或SkyWalking Satellite卫星。跟踪ID,段ID和跨度ID将自动附加到业务日志中,那么我们排查问题时候就能根据tid进行查询。
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:xx.xx.xx.xx}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}agent与oap在本地的可以不配。
也可以不配置<appender-ref ref="grpc-log"/>,只负责打印,交给其他工具去收集。
附录配置项:
plugin.toolkit.log.transmit_formatted 是否以格式化或未格式化的格式传输记录的数据 true
plugin.toolkit.log.grpc.reporter.server_host 指定要向其报告日志数据的grpc服务器的主机 127.0.0.1
plugin.toolkit.log.grpc.reporter.server_port 指定要向其报告日志数据的grpc服务器的端口 11800
plugin.toolkit.log.grpc.reporter.max_message_size 指定grpc客户端要报告的日志数据的最大大小 10485760
plugin.toolkit.log.grpc.reporter.upstream_timeout 客户端向上游发送数据时将超时多长时间。单位是秒 30