|
3 | 3 |
|
4 | 4 | package com.microsoft.applicationinsights.agent.internal.init; |
5 | 5 |
|
6 | | -import com.azure.core.util.logging.ClientLogger; |
7 | 6 | import com.azure.monitor.opentelemetry.autoconfigure.implementation.AiSemanticAttributes; |
8 | 7 | import com.microsoft.applicationinsights.agent.internal.configuration.Configuration; |
9 | 8 | import com.microsoft.applicationinsights.agent.internal.sampling.AiFixedPercentageSampler; |
|
13 | 12 | import io.opentelemetry.context.Context; |
14 | 13 | import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; |
15 | 14 | import io.opentelemetry.sdk.common.CompletableResultCode; |
16 | | -import io.opentelemetry.sdk.internal.AttributesMap; |
17 | 15 | import io.opentelemetry.sdk.logs.LogRecordProcessor; |
18 | 16 | import io.opentelemetry.sdk.logs.ReadWriteLogRecord; |
19 | 17 | import io.opentelemetry.sdk.trace.ReadableSpan; |
20 | 18 | import io.opentelemetry.sdk.trace.samplers.SamplingDecision; |
21 | 19 | import io.opentelemetry.sdk.trace.samplers.SamplingResult; |
22 | 20 | import io.opentelemetry.semconv.ExceptionAttributes; |
23 | | -import java.lang.reflect.Field; |
24 | 21 | import java.util.List; |
25 | | -import javax.annotation.Nullable; |
26 | 22 |
|
27 | 23 | public class AzureMonitorLogFilteringProcessor implements LogRecordProcessor { |
28 | 24 |
|
29 | | - private static final ClientLogger logger = new ClientLogger(AzureMonitorLogProcessor.class); |
30 | | - private static final Field lockField; |
31 | | - private static final Field attributesMapField; |
32 | | - |
33 | | - static { |
34 | | - Class<?> sdkReadWriteLogRecordClass = getSdkReadWriteLogRecordClass(); |
35 | | - lockField = getLockField(sdkReadWriteLogRecordClass); |
36 | | - attributesMapField = getAttributesMapField(sdkReadWriteLogRecordClass); |
37 | | - } |
38 | | - |
39 | 25 | private final SamplingOverrides logSamplingOverrides; |
40 | 26 | private final SamplingOverrides exceptionSamplingOverrides; |
41 | 27 | private final LogRecordProcessor batchLogRecordProcessor; |
@@ -132,58 +118,8 @@ public void close() { |
132 | 118 | batchLogRecordProcessor.close(); |
133 | 119 | } |
134 | 120 |
|
135 | | - @Nullable |
136 | | - private static Class<?> getSdkReadWriteLogRecordClass() { |
137 | | - try { |
138 | | - return Class.forName("io.opentelemetry.sdk.logs.SdkReadWriteLogRecord"); |
139 | | - } catch (ClassNotFoundException e) { |
140 | | - return null; |
141 | | - } |
142 | | - } |
143 | | - |
144 | | - @Nullable |
145 | | - private static Field getLockField(Class<?> sdkReadWriteLogRecordClass) { |
146 | | - if (sdkReadWriteLogRecordClass == null) { |
147 | | - return null; |
148 | | - } |
149 | | - try { |
150 | | - Field lockField = sdkReadWriteLogRecordClass.getDeclaredField("lock"); |
151 | | - lockField.setAccessible(true); |
152 | | - return lockField; |
153 | | - } catch (NoSuchFieldException e) { |
154 | | - return null; |
155 | | - } |
156 | | - } |
157 | | - |
158 | | - @Nullable |
159 | | - private static Field getAttributesMapField(Class<?> sdkReadWriteLogRecordClass) { |
160 | | - if (sdkReadWriteLogRecordClass == null) { |
161 | | - return null; |
162 | | - } |
163 | | - try { |
164 | | - Field attributesMapField = sdkReadWriteLogRecordClass.getDeclaredField("attributes"); |
165 | | - attributesMapField.setAccessible(true); |
166 | | - return attributesMapField; |
167 | | - } catch (NoSuchFieldException e) { |
168 | | - return null; |
169 | | - } |
170 | | - } |
171 | | - |
172 | 121 | private static void setAttributeExceptionLogged(Span span, ReadWriteLogRecord logRecord) { |
173 | | - if (lockField == null || attributesMapField == null) { |
174 | | - return; |
175 | | - } |
176 | | - String stacktrace = null; |
177 | | - try { |
178 | | - synchronized (lockField) { |
179 | | - // TODO add `getAttribute()` to `ReadWriteLogRecord` upstream |
180 | | - stacktrace = |
181 | | - ((AttributesMap) attributesMapField.get(logRecord)) |
182 | | - .get(ExceptionAttributes.EXCEPTION_STACKTRACE); |
183 | | - } |
184 | | - } catch (Exception e) { |
185 | | - logger.error(e.getMessage(), e); |
186 | | - } |
| 122 | + String stacktrace = logRecord.getAttribute(ExceptionAttributes.EXCEPTION_STACKTRACE); |
187 | 123 | if (stacktrace != null) { |
188 | 124 | span.setAttribute(AiSemanticAttributes.LOGGED_EXCEPTION, stacktrace); |
189 | 125 | } |
|
0 commit comments