需要引入如下依赖。配合log4j2
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-log4j-2.x</artifactId>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
</dependency>
log4j2-spring.xml 如下,这样就能把service和controller层的log日志搜集起来,存入es,定期清理
<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="5" packages="org.apache.skywalking.apm.toolkit.log.log4j.v2.x">
<Properties>
<property name="CONSOLE_LOG_PATTERN"
value="%d %highlight{%-5level [%traceId] pid:%pid-%line}{ERROR=Bright RED, WARN=Bright Yellow, debug=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} %style{[%t]}{bright,magenta} %style{%c{1.}.%M(%L)}{cyan}: %msg%n"/>
<property name="LOG_PATTERN"
value="[TID:%equals{%X{traceId}}{}{N/A}]:%msg%n"/>
<property name="FILE_PATH">D:\\log4j2</property>
<property name="applicationName">${spring:spring.application.name}</property>
<property name="FILE_STORE_MAX" value="50MB"/>
<property name="FILE_WRITE_INTERVAL" value="1"/>
<property name="LOG_MAX_HISTORY" value="60"/>
</Properties>
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${CONSOLE_LOG_PATTERN}"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<GRPCLogClientAppender name="grpc-log">
<PatternLayout
pattern="[%date{yyyy-MM-ddHH:mm:ss.SSS}][${appEnv}][${moduleName}][${podIp}][%level][%traceId][%thread][%C][%M][%line][%X{X-B3-TraceId}%X{X-B3-SpanId} %X{X-B3-ParentSpanId}]-%m%n"/>
</GRPCLogClientAppender>
</appenders>
<loggers>
<Logger name="org.apache.kafka" level="info"/>
<logger name="com.alibaba.nacos" level="error" additivity="false">
<AppenderRef ref="Console"/>
</logger>
<logger name="com.open.service.goods.service" level="INFO" additivity="false">
<AppenderRef ref="grpc-log"/>
<appender-ref ref="Console"/>
</logger>
<logger name="com.open.service.goods.controller" level="INFO" additivity="false">
<AppenderRef ref="grpc-log"/>
<appender-ref ref="Console"/>
</logger>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
需要使用Trace采用监控到方法级别,但是sql默认都能监控的。
@Trace
@Tags({@Tag(key = "id", value = "arg[0]"), @Tag(key = "out", value = "returnedObj")})
@GetMapping("/test")
public Result<String> test(Integer id) {
log.info("ctest");
caProdService.getAttributesById(1);
return Result.data("asdas");
}
查询es的dsl
GET /sw_log-20240802/_search
{
"size": 1,
"sort": [
{
"timestamp": {
"order": "asc"
}
}
],
"query": {
"match": {
"content_match": "shutdown"
}
}
}