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
4 files changed +93
-7
lines changed Original file line number Diff line number Diff line change @@ -100,6 +100,30 @@ testing {
100
100
}
101
101
}
102
102
}
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
+ }
103
127
}
104
128
}
105
129
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 9
9
10
10
import ch .qos .logback .classic .LoggerContext ;
11
11
import ch .qos .logback .classic .spi .ILoggingEvent ;
12
+ import ch .qos .logback .core .Appender ;
12
13
import ch .qos .logback .core .UnsynchronizedAppenderBase ;
14
+ import ch .qos .logback .core .spi .AppenderAttachable ;
13
15
import io .opentelemetry .api .OpenTelemetry ;
14
16
import io .opentelemetry .instrumentation .logback .appender .v1_0 .internal .LoggingEventMapper ;
15
17
import java .util .ArrayList ;
@@ -60,14 +62,17 @@ public static void install(OpenTelemetry openTelemetry) {
60
62
}
61
63
LoggerContext loggerContext = (LoggerContext ) loggerFactorySpi ;
62
64
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 )
64
74
.iteratorForAppenders ()
65
- .forEachRemaining (
66
- appender -> {
67
- if (appender instanceof OpenTelemetryAppender ) {
68
- ((OpenTelemetryAppender ) appender ).setOpenTelemetry (openTelemetry );
69
- }
70
- });
75
+ .forEachRemaining (a -> OpenTelemetryAppender .install (openTelemetry , a ));
71
76
}
72
77
}
73
78
You can’t perform that action at this time.
0 commit comments