Support `-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector` in gRPC log report. (#182)

Co-authored-by: andotorg <xieyan9@tal.com>
This commit is contained in:
andotorg 2022-05-22 13:56:29 +08:00 committed by GitHub
parent 42377bb274
commit 5bc1d1d1f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 6 deletions

View File

@ -17,6 +17,7 @@ Release Notes.
* Enhance Apache ShenYu (incubating) plugin: support trace `grpc`,`sofarpc`,`motan`,`tars` rpc proxy.
* Add primary endpoint name to log events.
* Fix Span not finished in gateway plugin when the gateway request timeout.
* Support `-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector` in gRPC log report.
#### Documentation

View File

@ -23,6 +23,7 @@ import java.util.Objects;
import java.util.Optional;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.async.RingBufferLogEvent;
import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
import org.apache.skywalking.apm.agent.core.conf.Config;
import org.apache.skywalking.apm.agent.core.context.ContextManager;
@ -37,6 +38,7 @@ import org.apache.skywalking.apm.network.logging.v3.LogDataBody;
import org.apache.skywalking.apm.network.logging.v3.LogTags;
import org.apache.skywalking.apm.network.logging.v3.TextLog;
import org.apache.skywalking.apm.network.logging.v3.TraceContext;
import org.apache.skywalking.apm.toolkit.logging.common.log.SkyWalkingContext;
import org.apache.skywalking.apm.toolkit.logging.common.log.ToolkitConfig;
public class GRPCLogAppenderInterceptor implements InstanceMethodsAroundInterceptor {
@ -114,12 +116,22 @@ public class GRPCLogAppenderInterceptor implements InstanceMethodsAroundIntercep
builder.setEndpoint(primaryEndpointName);
}
return -1 == ContextManager.getSpanId() ? builder.build()
: builder.setTraceContext(TraceContext.newBuilder()
.setTraceId(ContextManager.getGlobalTraceId())
.setSpanId(ContextManager.getSpanId())
.setTraceSegmentId(ContextManager.getSegmentId())
.build()).build();
if (event instanceof RingBufferLogEvent) {
EnhancedInstance instance = (EnhancedInstance) event;
SkyWalkingContext context = (SkyWalkingContext) instance.getSkyWalkingDynamicField();
return builder.setTraceContext(TraceContext.newBuilder()
.setTraceId(context.getTraceId())
.setSpanId(context.getSpanId())
.setTraceSegmentId(context.getTraceSegmentId())
.build()).build();
} else {
return -1 == ContextManager.getSpanId() ? builder.build()
: builder.setTraceContext(TraceContext.newBuilder()
.setTraceId(ContextManager.getGlobalTraceId())
.setSpanId(ContextManager.getSpanId())
.setTraceSegmentId(ContextManager.getSegmentId())
.build()).build();
}
}
private String transformLogText(final AbstractAppender appender, final LogEvent event) {

View File

@ -38,6 +38,14 @@ public class SkyWalkingContext {
return traceId;
}
public String getTraceSegmentId() {
return traceSegmentId;
}
public int getSpanId() {
return spanId;
}
@Override
public String toString() {
if (-1 == spanId) {

View File

@ -128,6 +128,7 @@ The gRPC report could forward the collected logs to SkyWalking OAP server, or [S
log.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
```
* Support `-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector` in gRPC log report.
## Transmitting un-formatted messages