File tree Expand file tree Collapse file tree 4 files changed +93
-7
lines changed
instrumentation/logback/logback-appender-1.0/library
java/io/opentelemetry/instrumentation/logback/appender/v1_0
main/java/io/opentelemetry/instrumentation/logback/appender/v1_0 Expand file tree Collapse file tree 4 files changed +93
-7
lines changed Original file line number Diff line number Diff line change @@ -100,6 +100,30 @@ testing {
100100 }
101101 }
102102 }
103+
104+ val asyncAppenderTest by registering(JvmTestSuite ::class ) {
105+ dependencies {
106+ implementation(project(" :instrumentation:logback:logback-appender-1.0:library" ))
107+ implementation(" io.opentelemetry:opentelemetry-sdk-testing" )
108+ implementation(project(" :testing-common" ))
109+
110+ if (latestDepTest) {
111+ implementation(" ch.qos.logback:logback-classic:+" )
112+ } else {
113+ implementation(" ch.qos.logback:logback-classic" ) {
114+ version {
115+ // first version that has ch.qos.logback.classic.AsyncAppender
116+ strictly(" 1.0.4" )
117+ }
118+ }
119+ implementation(" org.slf4j:slf4j-api" ) {
120+ version {
121+ strictly(" 1.6.4" )
122+ }
123+ }
124+ }
125+ }
126+ }
103127 }
104128}
105129
Original file line number Diff line number Diff line change 1+ /*
2+ * Copyright The OpenTelemetry Authors
3+ * SPDX-License-Identifier: Apache-2.0
4+ */
5+
6+ package io .opentelemetry .instrumentation .logback .appender .v1_0 ;
7+
8+ import io .opentelemetry .instrumentation .testing .junit .LibraryInstrumentationExtension ;
9+ import org .junit .jupiter .api .BeforeEach ;
10+ import org .junit .jupiter .api .Test ;
11+ import org .junit .jupiter .api .extension .RegisterExtension ;
12+ import org .slf4j .Logger ;
13+ import org .slf4j .LoggerFactory ;
14+
15+ class AsyncOpenTelemetryAppenderTest {
16+ private static final Logger logger = LoggerFactory .getLogger ("TestLogger" );
17+
18+ @ RegisterExtension
19+ private static final LibraryInstrumentationExtension testing =
20+ LibraryInstrumentationExtension .create ();
21+
22+ @ BeforeEach
23+ void setup () {
24+ OpenTelemetryAppender .install (testing .getOpenTelemetry ());
25+ }
26+
27+ @ Test
28+ void captureLogMessage () {
29+ logger .info ("log message 1" );
30+
31+ testing .waitAndAssertLogRecords (logRecord -> logRecord .hasBody ("log message 1" ));
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2+ <configuration >
3+
4+ <appender name =" console" class =" ch.qos.logback.core.ConsoleAppender" >
5+ <encoder >
6+ <pattern >
7+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
8+ </pattern >
9+ </encoder >
10+ </appender >
11+ <appender name =" OpenTelemetry"
12+ class =" io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender" >
13+ </appender >
14+
15+ <appender name =" AsyncAppender" class =" ch.qos.logback.classic.AsyncAppender" >
16+ <appender-ref ref =" OpenTelemetry" />
17+ </appender >
18+
19+ <root level =" INFO" >
20+ <appender-ref ref =" console" />
21+ <appender-ref ref =" AsyncAppender" />
22+ </root >
23+
24+ </configuration >
Original file line number Diff line number Diff line change 99
1010import ch .qos .logback .classic .LoggerContext ;
1111import ch .qos .logback .classic .spi .ILoggingEvent ;
12+ import ch .qos .logback .core .Appender ;
1213import ch .qos .logback .core .UnsynchronizedAppenderBase ;
14+ import ch .qos .logback .core .spi .AppenderAttachable ;
1315import io .opentelemetry .api .OpenTelemetry ;
1416import io .opentelemetry .instrumentation .logback .appender .v1_0 .internal .LoggingEventMapper ;
1517import java .util .ArrayList ;
@@ -60,14 +62,17 @@ public static void install(OpenTelemetry openTelemetry) {
6062 }
6163 LoggerContext loggerContext = (LoggerContext ) loggerFactorySpi ;
6264 for (ch .qos .logback .classic .Logger logger : loggerContext .getLoggerList ()) {
63- logger
65+ logger .iteratorForAppenders ().forEachRemaining (appender -> install (openTelemetry , appender ));
66+ }
67+ }
68+
69+ private static void install (OpenTelemetry openTelemetry , Appender <?> appender ) {
70+ if (appender instanceof OpenTelemetryAppender ) {
71+ ((OpenTelemetryAppender ) appender ).setOpenTelemetry (openTelemetry );
72+ } else if (appender instanceof AppenderAttachable ) {
73+ ((AppenderAttachable <?>) appender )
6474 .iteratorForAppenders ()
65- .forEachRemaining (
66- appender -> {
67- if (appender instanceof OpenTelemetryAppender ) {
68- ((OpenTelemetryAppender ) appender ).setOpenTelemetry (openTelemetry );
69- }
70- });
75+ .forEachRemaining (a -> OpenTelemetryAppender .install (openTelemetry , a ));
7176 }
7277 }
7378
You can’t perform that action at this time.
0 commit comments