|
25 | 25 | import java.util.concurrent.locks.Lock; |
26 | 26 | import java.util.concurrent.locks.ReadWriteLock; |
27 | 27 | import java.util.concurrent.locks.ReentrantReadWriteLock; |
| 28 | +import java.util.function.Consumer; |
28 | 29 | import org.slf4j.ILoggerFactory; |
29 | 30 | import org.slf4j.LoggerFactory; |
30 | 31 | import org.slf4j.MDC; |
@@ -60,23 +61,34 @@ public OpenTelemetryAppender() {} |
60 | 61 | * the {@link LoggerContext}. |
61 | 62 | */ |
62 | 63 | public static void install(OpenTelemetry openTelemetry) { |
| 64 | + forEachAppender(appender -> appender.setOpenTelemetry(openTelemetry)); |
| 65 | + } |
| 66 | + |
| 67 | + static void resetForTest() { |
| 68 | + forEachAppender(OpenTelemetryAppender::resetAppenderForTest); |
| 69 | + } |
| 70 | + |
| 71 | + private static void forEachAppender(Consumer<OpenTelemetryAppender> consumer) { |
63 | 72 | ILoggerFactory loggerFactorySpi = LoggerFactory.getILoggerFactory(); |
64 | 73 | if (!(loggerFactorySpi instanceof LoggerContext)) { |
65 | 74 | return; |
66 | 75 | } |
67 | 76 | LoggerContext loggerContext = (LoggerContext) loggerFactorySpi; |
68 | 77 | for (Logger logger : loggerContext.getLoggerList()) { |
69 | | - logger.iteratorForAppenders().forEachRemaining(appender -> install(openTelemetry, appender)); |
| 78 | + logger |
| 79 | + .iteratorForAppenders() |
| 80 | + .forEachRemaining(appender -> forEachAppender(consumer, appender)); |
70 | 81 | } |
71 | 82 | } |
72 | 83 |
|
73 | | - private static void install(OpenTelemetry openTelemetry, Appender<?> appender) { |
| 84 | + private static void forEachAppender( |
| 85 | + Consumer<OpenTelemetryAppender> consumer, Appender<?> appender) { |
74 | 86 | if (appender instanceof OpenTelemetryAppender) { |
75 | | - ((OpenTelemetryAppender) appender).setOpenTelemetry(openTelemetry); |
| 87 | + consumer.accept((OpenTelemetryAppender) appender); |
76 | 88 | } else if (appender instanceof AppenderAttachable) { |
77 | 89 | ((AppenderAttachable<?>) appender) |
78 | 90 | .iteratorForAppenders() |
79 | | - .forEachRemaining(a -> OpenTelemetryAppender.install(openTelemetry, a)); |
| 91 | + .forEachRemaining(a -> forEachAppender(consumer, a)); |
80 | 92 | } |
81 | 93 | } |
82 | 94 |
|
@@ -271,6 +283,18 @@ public void setOpenTelemetry(OpenTelemetry openTelemetry) { |
271 | 283 | } |
272 | 284 | } |
273 | 285 |
|
| 286 | + private void resetAppenderForTest() { |
| 287 | + Lock writeLock = lock.writeLock(); |
| 288 | + writeLock.lock(); |
| 289 | + try { |
| 290 | + openTelemetry = null; |
| 291 | + eventsToReplay.clear(); |
| 292 | + replayLimitWarningLogged.set(false); |
| 293 | + } finally { |
| 294 | + writeLock.unlock(); |
| 295 | + } |
| 296 | + } |
| 297 | + |
274 | 298 | private void emit(OpenTelemetry openTelemetry, ILoggingEvent event) { |
275 | 299 | mapper.emit(openTelemetry.getLogsBridge(), event, -1); |
276 | 300 | } |
|
0 commit comments