2626import io .opentelemetry .sdk .common .InstrumentationScopeInfo ;
2727import io .opentelemetry .sdk .logs .data .LogRecordData ;
2828import io .opentelemetry .sdk .resources .Resource ;
29+ import io .opentelemetry .sdk .testing .assertj .AttributeAssertion ;
2930import java .time .Instant ;
31+ import java .util .ArrayList ;
32+ import java .util .Arrays ;
33+ import java .util .List ;
3034import org .apache .logging .log4j .LogManager ;
3135import org .apache .logging .log4j .Logger ;
3236import org .apache .logging .log4j .Marker ;
@@ -102,12 +106,10 @@ void logNoSpan() {
102106 .hasInstrumentationScope (instrumentationScopeInfo )
103107 .hasBody ("log message 1" )
104108 .hasAttributesSatisfyingExactly (
105- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
106- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
107- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
108- equalTo (CODE_FUNCTION , "logNoSpan" ),
109- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
110- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" )));
109+ addLocationAttributes (
110+ "logNoSpan" ,
111+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
112+ equalTo (THREAD_ID , Thread .currentThread ().getId ()))));
111113 }
112114
113115 @ Test
@@ -137,15 +139,13 @@ void logWithExtras() {
137139 .hasSeverity (Severity .INFO )
138140 .hasSeverityText ("INFO" )
139141 .hasAttributesSatisfyingExactly (
140- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
141- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
142- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
143- equalTo (CODE_FUNCTION , "logWithExtras" ),
144- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
145- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" ),
146- equalTo (EXCEPTION_TYPE , IllegalStateException .class .getName ()),
147- equalTo (EXCEPTION_MESSAGE , "Error!" ),
148- satisfies (EXCEPTION_STACKTRACE , v -> v .contains ("logWithExtras" )));
142+ addLocationAttributes (
143+ "logWithExtras" ,
144+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
145+ equalTo (THREAD_ID , Thread .currentThread ().getId ()),
146+ equalTo (EXCEPTION_TYPE , IllegalStateException .class .getName ()),
147+ equalTo (EXCEPTION_MESSAGE , "Error!" ),
148+ satisfies (EXCEPTION_STACKTRACE , v -> v .contains ("logWithExtras" ))));
149149
150150 LogRecordData logRecordData = AssertAccess .getActual (logRecord );
151151 assertThat (logRecordData .getTimestampEpochNanos ())
@@ -174,14 +174,12 @@ void logContextData() {
174174 .hasInstrumentationScope (instrumentationScopeInfo )
175175 .hasBody ("log message 1" )
176176 .hasAttributesSatisfyingExactly (
177- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
178- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
179- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
180- equalTo (CODE_FUNCTION , "logContextData" ),
181- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
182- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" ),
183- equalTo (stringKey ("key1" ), "val1" ),
184- equalTo (stringKey ("key2" ), "val2" )));
177+ addLocationAttributes (
178+ "logContextData" ,
179+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
180+ equalTo (THREAD_ID , Thread .currentThread ().getId ()),
181+ equalTo (stringKey ("key1" ), "val1" ),
182+ equalTo (stringKey ("key2" ), "val2" ))));
185183 }
186184
187185 @ Test
@@ -200,14 +198,12 @@ void logStringMapMessage() {
200198 .hasResource (resource )
201199 .hasInstrumentationScope (instrumentationScopeInfo )
202200 .hasAttributesSatisfyingExactly (
203- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
204- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
205- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
206- equalTo (CODE_FUNCTION , "logStringMapMessage" ),
207- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
208- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" ),
209- equalTo (stringKey ("log4j.map_message.key1" ), "val1" ),
210- equalTo (stringKey ("log4j.map_message.key2" ), "val2" )));
201+ addLocationAttributes (
202+ "logStringMapMessage" ,
203+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
204+ equalTo (THREAD_ID , Thread .currentThread ().getId ()),
205+ equalTo (stringKey ("log4j.map_message.key1" ), "val1" ),
206+ equalTo (stringKey ("log4j.map_message.key2" ), "val2" ))));
211207 }
212208
213209 @ Test
@@ -227,13 +223,11 @@ void logStringMapMessageWithSpecialAttribute() {
227223 .hasInstrumentationScope (instrumentationScopeInfo )
228224 .hasBody ("val2" )
229225 .hasAttributesSatisfyingExactly (
230- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
231- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
232- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
233- equalTo (CODE_FUNCTION , "logStringMapMessageWithSpecialAttribute" ),
234- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
235- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" ),
236- equalTo (stringKey ("log4j.map_message.key1" ), "val1" )));
226+ addLocationAttributes (
227+ "logStringMapMessageWithSpecialAttribute" ,
228+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
229+ equalTo (THREAD_ID , Thread .currentThread ().getId ()),
230+ equalTo (stringKey ("log4j.map_message.key1" ), "val1" ))));
237231 }
238232
239233 @ Test
@@ -268,13 +262,35 @@ void logStructuredDataMessage() {
268262 .hasInstrumentationScope (instrumentationScopeInfo )
269263 .hasBody ("a message" )
270264 .hasAttributesSatisfyingExactly (
271- equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
272- equalTo (THREAD_ID , Thread .currentThread ().getId ()),
273- equalTo (CODE_NAMESPACE , AbstractOpenTelemetryAppenderTest .class .getName ()),
274- equalTo (CODE_FUNCTION , "logStructuredDataMessage" ),
275- satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
276- equalTo (CODE_FILEPATH , "AbstractOpenTelemetryAppenderTest.java" ),
277- equalTo (stringKey ("log4j.map_message.key1" ), "val1" ),
278- equalTo (stringKey ("log4j.map_message.key2" ), "val2" )));
265+ addLocationAttributes (
266+ "logStructuredDataMessage" ,
267+ equalTo (THREAD_NAME , Thread .currentThread ().getName ()),
268+ equalTo (THREAD_ID , Thread .currentThread ().getId ()),
269+ equalTo (stringKey ("log4j.map_message.key1" ), "val1" ),
270+ equalTo (stringKey ("log4j.map_message.key2" ), "val2" ))));
271+ }
272+
273+ private static List <AttributeAssertion > addLocationAttributes (
274+ String methodName , AttributeAssertion ... assertions ) {
275+ return addLocationAttributes (AbstractOpenTelemetryAppenderTest .class , methodName , assertions );
276+ }
277+
278+ protected static List <AttributeAssertion > addLocationAttributes (
279+ Class <?> testClass , String methodName , AttributeAssertion ... assertions ) {
280+ String selector = System .getProperty ("Log4j2.contextSelector" );
281+ boolean async = selector != null && selector .endsWith ("AsyncLoggerContextSelector" );
282+ if (async ) {
283+ // code attributes as not added by default when async logger is used
284+ return Arrays .asList (assertions );
285+ }
286+
287+ List <AttributeAssertion > result = new ArrayList <>(Arrays .asList (assertions ));
288+ result .addAll (
289+ Arrays .asList (
290+ equalTo (CODE_NAMESPACE , testClass .getName ()),
291+ equalTo (CODE_FUNCTION , methodName ),
292+ satisfies (CODE_LINENO , AbstractLongAssert ::isPositive ),
293+ equalTo (CODE_FILEPATH , testClass .getSimpleName () + ".java" )));
294+ return result ;
279295 }
280296}
0 commit comments