Fix double log capture (#299)
This commit is contained in:
parent
64b9585306
commit
10d93ac2a0
|
@ -85,12 +85,25 @@ public class Log4jSpansInstrumentation extends Instrumenter.Default {
|
|||
public static class LogMessageAdvice {
|
||||
|
||||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void methodEnter(
|
||||
public static boolean methodEnter(
|
||||
@Advice.This final Logger logger,
|
||||
@Advice.Argument(1) final Level level,
|
||||
@Advice.Argument(3) final Message message,
|
||||
@Advice.Argument(4) final Throwable t) {
|
||||
Log4jSpans.capture(logger, level, message, t);
|
||||
// need to track call depth across all loggers in order to avoid double capture when one
|
||||
// logging framework delegates to another
|
||||
final boolean topLevel = CallDepthThreadLocalMap.incrementCallDepth("logger") == 0;
|
||||
if (topLevel) {
|
||||
Log4jSpans.capture(logger, level, message, t);
|
||||
}
|
||||
return topLevel;
|
||||
}
|
||||
|
||||
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
|
||||
public static void methodExit(@Advice.Enter final boolean topLevel) {
|
||||
if (topLevel) {
|
||||
CallDepthThreadLocalMap.reset("logger");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue