diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 469149da7b..4051688364 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -28,11 +28,13 @@ endif::[] * Exceptions that are logged using the fatal log level are now captured (log4j2 only) - {pull}2377[#2377] * Replaced `authorization` in the default value of `sanitize_field_names` with `*auth*` - {pull}2326[#2326] * Unsampled transactions are dropped and not sent to the APM-Server if the APM-Server version is 8.0+ - {pull}2329[#2329] +* Adding agent logging capabilities to our SDK, making it available for external plugins - {pull}2390[#2390] [float] ===== Bug fixes * Fix runtime attach with some docker images - {pull}2385[#2385] * Restore dynamic capability to `log_level` config for plugin loggers - {pull}2384[#2384] +* Fix slf4j-related `LinkageError` - {pull}2390[#2390] [[release-notes-1.x]] === Java Agent version 1.x diff --git a/NOTICE b/NOTICE index 7621638dcf..1e21cb1fb6 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ Elastic APM Java Agent -Copyright 2018-2019 Elasticsearch B.V. +Copyright 2018-2022 Elasticsearch B.V. ############################################################################### @@ -14,6 +14,7 @@ following sources: - JCTools - https://github.com/jvm-profiling-tools/async-profiler - https://github.com/real-logic/agrona + - Apache Log4j 2 - https://logging.apache.org/log4j/2.x/license.html ------------------------------------------------------------------------------ stagemonitor NOTICE @@ -130,6 +131,27 @@ information: Portions Copyright [yyyy] [name of copyright owner] CDDL HEADER END +------------------------------------------------------------------------------ +Apache Log4j NOTICE + +Apache Log4j +Copyright 1999-2021 Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +ResolverUtil.java +Copyright 2005-2006 Tim Fennell + +Dumbster SMTP test server +Copyright 2004 Jason Paul Kitchen + +TypeUtil.java +Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams + +picocli (http://picocli.info) +Copyright 2017 Remko Popma + ------------------------------------------------------------------------------ Apache License @@ -369,7 +391,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ############################################################################### -This product includes code from slf4j, under MIT License +This product includes code from slf4j, under MIT License. +It also includes code that is based on some slf4j interfaces. Copyright (c) 2004-2011 QOS.ch All rights reserved. diff --git a/apm-agent-core/pom.xml b/apm-agent-core/pom.xml index 740adc4ebf..b11ac7f80b 100644 --- a/apm-agent-core/pom.xml +++ b/apm-agent-core/pom.xml @@ -69,6 +69,11 @@ log4j-slf4j-impl ${version.log4j} + + org.slf4j + slf4j-api + ${version.slf4j} + co.elastic.logging log4j2-ecs-layout diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java index 3ecea17ab8..8762ec8a69 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/ElasticApmAgent.java @@ -58,8 +58,8 @@ import net.bytebuddy.matcher.ElementMatchers; import net.bytebuddy.pool.TypePool; import net.bytebuddy.utility.JavaModule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.source.ConfigurationSource; @@ -526,12 +526,9 @@ private static void validateAdviceReturnAndParameterTypes(MethodDescription.InDe String adviceMethod = advice.getInternalName(); try { checkNotAgentType(advice.getReturnType(), "return type", adviceClass, adviceMethod); - checkNotSlf4jType(advice.getReturnType(), "return type", adviceClass, adviceMethod); for (ParameterDescription.InDefinedShape parameter : advice.getParameters()) { checkNotAgentType(parameter.getType(), "parameter", adviceClass, adviceMethod); - checkNotSlf4jType(parameter.getType(), "parameter", adviceClass, adviceMethod); - AnnotationDescription.Loadable returnAnnotation = parameter.getDeclaredAnnotations().ofType(Advice.Return.class); if (returnAnnotation != null && !returnAnnotation.load().readOnly()) { throw new IllegalStateException("Advice parameter must not use '@Advice.Return(readOnly=false)', use @Advice.AssignReturned.ToReturned instead"); @@ -552,15 +549,6 @@ private static void checkNotAgentType(TypeDescription.Generic type, String descr } } - private static void checkNotSlf4jType(TypeDescription.Generic type, String description, String adviceClass, String adviceMethod) { - // When trying to instrument slf4j classes from the application, advices would instead resolve the types from the agent class loader - // This would lead to errors on indy bootstrap, similar to the ones reported at https://github.com/elastic/apm-agent-java/issues/2163 - String name = type.asRawType().getTypeName(); - if (name.startsWith("org.slf4j.")) { - throw new IllegalStateException(String.format("Advice %s in %s#%s must not reference slf4j types: %s", description, adviceClass, adviceMethod, name)); - } - } - private static MatcherTimer getOrCreateTimer(Class adviceClass) { final String name = adviceClass.getName(); MatcherTimer timer = matcherTimers.get(name); diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java index efb2472fb2..cda540de4f 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyBootstrap.java @@ -27,8 +27,8 @@ import net.bytebuddy.asm.Advice; import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.dynamic.loading.ClassInjector; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.util.IOUtils; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyPluginClassLoaderFactory.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyPluginClassLoaderFactory.java index 151987c724..07ede079c1 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyPluginClassLoaderFactory.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/IndyPluginClassLoaderFactory.java @@ -23,8 +23,8 @@ import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.pool.TypePool; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/MatcherTimerLifecycleListener.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/MatcherTimerLifecycleListener.java index aadd5c863d..2a45f232fb 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/MatcherTimerLifecycleListener.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/MatcherTimerLifecycleListener.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.bci.bytebuddy.MatcherTimer; import co.elastic.apm.agent.context.AbstractLifecycleListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.ArrayList; import java.util.Collections; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java index ec5df5cfc6..974a7671ff 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/CustomElementMatchers.java @@ -27,8 +27,8 @@ import net.bytebuddy.description.annotation.AnnotationSource; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/ErrorLoggingListener.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/ErrorLoggingListener.java index 311fd0b2ea..648feaf866 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/ErrorLoggingListener.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/bytebuddy/ErrorLoggingListener.java @@ -20,8 +20,8 @@ import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.utility.JavaModule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; public class ErrorLoggingListener extends AgentBuilder.Listener.Adapter { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java index 41edf62dcb..271bb3d07c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/bci/classloading/IndyPluginClassLoader.java @@ -59,18 +59,16 @@ private static ClassLoader getParent(@Nullable ClassLoader targetClassLoader, Cl agentClassLoader, startsWith("co.elastic.apm.agent").or(startsWith("net.bytebuddy")), targetClassLoader, ElementMatchers.any()); } else { - // in prod, always search in the agent class loader first - // this ensures that we're referencing the agent bundled classes in advices rather than the ones form the application - // (for example for slf4j, Byte Buddy, or even dependencies that are bundled in external plugins etc.) + // In prod, always search in the agent class loader first. + // This ensures that we're referencing the agent bundled classes in advices rather than the ones form the application + // (for example Byte Buddy, or even dependencies that are bundled in external plugins etc.) // However, we need to avoid looking up classes from the agent class loader that we want to instrument. // For example, we're instrumenting log4j2 to support ecs_log_reformatting which is also available within the agent class loader. // Within the context of an instrumentation plugin, referencing log4j2 should always reference the instrumented types, not the ones shipped with the agent. // The list of packages not to load should correspond with matching dependency exclusions from the apm-agent-core in apm-agent-plugins/pom.xml - // As we're using slf4j as the logging facade, plugins don't need to refer to the agent-bundled log4j2. - // This implies, we can't reference instrumented slf4j classes in plugins, though. - // We ensure this by validating that advice method signatures don't contain slf4j classes. + // As we're using a custom logging facade, plugins don't need to refer to the agent-bundled log4j2 or slf4j. return new DiscriminatingMultiParentClassLoader( - agentClassLoader, not(startsWith("org.apache.logging.log4j")), + agentClassLoader, not(startsWith("org.apache.logging.log4j").and(not(startsWith("org.slf4j")))), targetClassLoader, ElementMatchers.any()); } } diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java index 0f8997a507..fac4621b00 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/cache/WeakKeySoftValueLoadingCache.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.ref.SoftReference; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/NullCheck.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/NullCheck.java index 6f1263cb5a..59fd8b54b4 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/NullCheck.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/NullCheck.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.collections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/WeakMapCleaner.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/WeakMapCleaner.java index 1cb9f13afd..3755d8b26b 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/WeakMapCleaner.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/collections/WeakMapCleaner.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.context.AbstractLifecycleListener; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.util.ExecutorUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSource.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSource.java index 204757c30d..d41ffda36f 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSource.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSource.java @@ -26,8 +26,8 @@ import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonReader; import com.dslplatform.json.MapConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.configuration.source.AbstractConfigurationSource; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/StartupInfo.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/StartupInfo.java index 7220a56290..73d3655570 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/StartupInfo.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/configuration/StartupInfo.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.stacktrace.StacktraceConfiguration; import co.elastic.apm.agent.util.VersionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationRegistry; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java index 3b21c89869..9d066b3913 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java @@ -46,8 +46,8 @@ import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.util.DependencyInjectingServiceLoader; import co.elastic.apm.agent.util.ExecutorUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.ConfigurationRegistry; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracerBuilder.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracerBuilder.java index a3a1fcd1e4..dab543a709 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracerBuilder.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracerBuilder.java @@ -38,8 +38,8 @@ import co.elastic.apm.agent.report.serialize.DslJsonSerializer; import co.elastic.apm.agent.util.DependencyInjectingServiceLoader; import co.elastic.apm.agent.util.ExecutorUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.configuration.source.ConfigurationSource; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/CircuitBreaker.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/CircuitBreaker.java index 7cec9ba149..f17e20876c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/CircuitBreaker.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/CircuitBreaker.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.context.AbstractLifecycleListener; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.util.ExecutorUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/GCStressMonitor.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/GCStressMonitor.java index 62e2f5aed9..62405dadd6 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/GCStressMonitor.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/GCStressMonitor.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.impl.circuitbreaker; import co.elastic.apm.agent.impl.ElasticApmTracer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.lang.management.ManagementFactory; import java.lang.management.MemoryPoolMXBean; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/SystemCpuStressMonitor.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/SystemCpuStressMonitor.java index 1c1e41a8fe..cb0b6536aa 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/SystemCpuStressMonitor.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/circuitbreaker/SystemCpuStressMonitor.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.util.JmxUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.management.ManagementFactory; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java index cf5d017224..5632f397ce 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java @@ -29,8 +29,8 @@ import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.objectpool.Recyclable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Collection; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java index ef5ef92bbf..4d462cd935 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/CloudMetadataProvider.java @@ -25,8 +25,8 @@ import com.dslplatform.json.DslJson; import com.dslplatform.json.JsonReader; import com.dslplatform.json.ObjectConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.BufferedReader; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/SystemInfo.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/SystemInfo.java index 56be557ff6..24e3d62fb0 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/SystemInfo.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/metadata/SystemInfo.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.common.util.ProcessExecutionUtil; import co.elastic.apm.agent.configuration.ServerlessConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.net.InetAddress; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java index f12f28d2f3..e83b9c44e5 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/AbstractSpan.java @@ -26,8 +26,8 @@ import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.objectpool.Recyclable; import co.elastic.apm.agent.report.ReporterConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.concurrent.TimeUnit; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java index 5842dab1eb..dcdd548206 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/Span.java @@ -27,8 +27,8 @@ import co.elastic.apm.agent.impl.context.Url; import co.elastic.apm.agent.impl.context.web.ResultUtil; import co.elastic.apm.agent.objectpool.Recyclable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.List; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceContext.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceContext.java index 83eab2732b..3e8b410148 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceContext.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceContext.java @@ -27,8 +27,8 @@ import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import co.elastic.apm.agent.util.ByteUtils; import co.elastic.apm.agent.util.HexUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.ref.WeakReference; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceState.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceState.java index da9f8ea88c..c037b785b3 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceState.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/transaction/TraceState.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.configuration.converter.RoundedDoubleConverter; import co.elastic.apm.agent.objectpool.Recyclable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.ArrayList; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/JulBridgeLogger.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/JulBridgeLogger.java index b4a8f65c7c..210df176d7 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/JulBridgeLogger.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/JulBridgeLogger.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.logging; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.ResourceBundle; import java.util.logging.Filter; @@ -49,7 +49,7 @@ *

* The approach we take is to mimic the public interface of {@link java.util.logging.Logger} and use the maven shadow plugin to replace the * usage of {@link java.util.logging.Logger} in our dependencies with this class. - * This class then forwards the logger calls to a slf4j {@link org.slf4j.Logger}. + * This class then forwards the logger calls to a {@link co.elastic.apm.agent.sdk.logging.Logger}. *

*/ public class JulBridgeLogger { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4j2LoggerBridge.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4j2LoggerBridge.java new file mode 100644 index 0000000000..7b5e5f8418 --- /dev/null +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4j2LoggerBridge.java @@ -0,0 +1,194 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.logging; + +import co.elastic.apm.agent.sdk.logging.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.spi.ExtendedLogger; + +/** + * Based on {@code org.apache.logging.slf4j.Log4jLogger} + */ +public class Log4j2LoggerBridge implements Logger { + + public static final String FQCN = Log4j2LoggerBridge.class.getName(); + + private final ExtendedLogger log4jLogger; + private final String name; + + public Log4j2LoggerBridge(ExtendedLogger log4jLogger, String name) { + this.log4jLogger = log4jLogger; + this.name = name; + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean isTraceEnabled() { + return log4jLogger.isEnabled(Level.TRACE, null, null); + } + + @Override + public void trace(final String format) { + log4jLogger.logIfEnabled(FQCN, Level.TRACE, null, format); + } + + @Override + public void trace(final String format, final Object o) { + log4jLogger.logIfEnabled(FQCN, Level.TRACE, null, format, o); + } + + @Override + public void trace(final String format, final Object arg1, final Object arg2) { + log4jLogger.logIfEnabled(FQCN, Level.TRACE, null, format, arg1, arg2); + } + + @Override + public void trace(final String format, final Object... args) { + log4jLogger.logIfEnabled(FQCN, Level.TRACE, null, format, args); + } + + @Override + public void trace(final String format, final Throwable t) { + log4jLogger.logIfEnabled(FQCN, Level.TRACE, null, format, t); + } + + @Override + public boolean isDebugEnabled() { + return log4jLogger.isEnabled(Level.DEBUG, null, null); + } + + @Override + public void debug(final String format) { + log4jLogger.logIfEnabled(FQCN, Level.DEBUG, null, format); + } + + @Override + public void debug(final String format, final Object o) { + log4jLogger.logIfEnabled(FQCN, Level.DEBUG, null, format, o); + } + + @Override + public void debug(final String format, final Object arg1, final Object arg2) { + log4jLogger.logIfEnabled(FQCN, Level.DEBUG, null, format, arg1, arg2); + } + + @Override + public void debug(final String format, final Object... args) { + log4jLogger.logIfEnabled(FQCN, Level.DEBUG, null, format, args); + } + + @Override + public void debug(final String format, final Throwable t) { + log4jLogger.logIfEnabled(FQCN, Level.DEBUG, null, format, t); + } + + @Override + public boolean isInfoEnabled() { + return log4jLogger.isEnabled(Level.INFO, null, null); + } + + @Override + public void info(final String format) { + log4jLogger.logIfEnabled(FQCN, Level.INFO, null, format); + } + + @Override + public void info(final String format, final Object o) { + log4jLogger.logIfEnabled(FQCN, Level.INFO, null, format, o); + } + + @Override + public void info(final String format, final Object arg1, final Object arg2) { + log4jLogger.logIfEnabled(FQCN, Level.INFO, null, format, arg1, arg2); + } + + @Override + public void info(final String format, final Object... args) { + log4jLogger.logIfEnabled(FQCN, Level.INFO, null, format, args); + } + + @Override + public void info(final String format, final Throwable t) { + log4jLogger.logIfEnabled(FQCN, Level.INFO, null, format, t); + } + + @Override + public boolean isWarnEnabled() { + return log4jLogger.isEnabled(Level.WARN, null, null); + } + + @Override + public void warn(final String format) { + log4jLogger.logIfEnabled(FQCN, Level.WARN, null, format); + } + + @Override + public void warn(final String format, final Object o) { + log4jLogger.logIfEnabled(FQCN, Level.WARN, null, format, o); + } + + @Override + public void warn(final String format, final Object arg1, final Object arg2) { + log4jLogger.logIfEnabled(FQCN, Level.WARN, null, format, arg1, arg2); + } + + @Override + public void warn(final String format, final Object... args) { + log4jLogger.logIfEnabled(FQCN, Level.WARN, null, format, args); + } + + @Override + public void warn(final String format, final Throwable t) { + log4jLogger.logIfEnabled(FQCN, Level.WARN, null, format, t); + } + + @Override + public boolean isErrorEnabled() { + return log4jLogger.isEnabled(Level.ERROR, null, null); + } + + @Override + public void error(final String format) { + log4jLogger.logIfEnabled(FQCN, Level.ERROR, null, format); + } + + @Override + public void error(final String format, final Object o) { + log4jLogger.logIfEnabled(FQCN, Level.ERROR, null, format, o); + } + + @Override + public void error(final String format, final Object arg1, final Object arg2) { + log4jLogger.logIfEnabled(FQCN, Level.ERROR, null, format, arg1, arg2); + } + + @Override + public void error(final String format, final Object... args) { + log4jLogger.logIfEnabled(FQCN, Level.ERROR, null, format, args); + } + + @Override + public void error(final String format, final Throwable t) { + log4jLogger.logIfEnabled(FQCN, Level.ERROR, null, format, t); + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4jLoggerFactoryBridge.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4jLoggerFactoryBridge.java new file mode 100644 index 0000000000..41165e9d9c --- /dev/null +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/Log4jLoggerFactoryBridge.java @@ -0,0 +1,47 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.logging; + +import co.elastic.apm.agent.sdk.logging.ILoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.spi.AbstractLoggerAdapter; +import org.apache.logging.log4j.spi.LoggerContext; +import org.apache.logging.log4j.util.StackLocatorUtil; + +/** + * Based on {@code org.apache.logging.slf4j.Log4jLoggerFactory} + */ +public class Log4jLoggerFactoryBridge extends AbstractLoggerAdapter implements ILoggerFactory { + + private static final String FQCN = Log4jLoggerFactoryBridge.class.getName(); + private static final String PACKAGE = "co.elastic.apm.agent.sdk.logging"; + + @Override + protected Logger newLogger(final String name, final LoggerContext context) { + final String key = Logger.ROOT_LOGGER_NAME.equals(name) ? LogManager.ROOT_LOGGER_NAME : name; + return new Log4j2LoggerBridge(context.getLogger(key), name); + } + + @Override + protected LoggerContext getContext() { + final Class anchor = StackLocatorUtil.getCallerClass(FQCN, PACKAGE); + return anchor == null ? LogManager.getContext() : getContext(StackLocatorUtil.getCallerClass(anchor)); + } +} diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/LoggingConfiguration.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/LoggingConfiguration.java index 74de52f08a..2d57e636e6 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/LoggingConfiguration.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/logging/LoggingConfiguration.java @@ -22,6 +22,7 @@ import co.elastic.apm.agent.configuration.converter.ByteValueConverter; import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.matcher.WildcardMatcherValueConverter; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; @@ -32,7 +33,6 @@ import org.apache.logging.log4j.core.selector.ContextSelector; import org.apache.logging.log4j.spi.LoggerContextFactory; import org.apache.logging.log4j.status.StatusLogger; -import org.slf4j.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.converter.ListValueConverter; @@ -52,7 +52,7 @@ *

* This class is a bit special compared to other {@link ConfigurationOptionProvider}s, * because we have to make sure that wie initialize the logger before anyone calls - * {@link org.slf4j.LoggerFactory#getLogger(Class)}. + * {@link LoggerFactory#getLogger(Class)}. * That's why we don't read the values from the {@link ConfigurationOption} fields but * iterate over the {@link ConfigurationSource}s manually to read the values * (see {@link Log4j2ConfigurationFactory#getValue}). @@ -324,6 +324,7 @@ public static void init(List sources, String ephemeralId) { // example through org.apache.logging.log4j.core.config.Configurator, means that loggers in non-initialized // contexts will either get the app-configuration for log4j, if such exists, or none. ConfigurationFactory.setConfigurationFactory(new Log4j2ConfigurationFactory(sources, ephemeralId)); + LoggerFactory.initialize(new Log4jLoggerFactoryBridge()); } catch (Throwable throwable) { System.err.println("[elastic-apm-agent] ERROR Failure during initialization of agent's log4j system: " + throwable.getMessage()); } finally { diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/MetricRegistry.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/MetricRegistry.java index 329bb04bc0..710de09f8b 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/MetricRegistry.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/MetricRegistry.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.report.ReporterConfiguration; import org.HdrHistogram.WriterReaderPhaser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/CGroupMetrics.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/CGroupMetrics.java index a2242740a1..5f0c0fb275 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/CGroupMetrics.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/CGroupMetrics.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.metrics.DoubleSupplier; import co.elastic.apm.agent.metrics.Labels; import co.elastic.apm.agent.metrics.MetricRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.util.StringUtils; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/JvmMemoryMetrics.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/JvmMemoryMetrics.java index 9d42b7aabb..114b6e32ab 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/JvmMemoryMetrics.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/metrics/builtin/JvmMemoryMetrics.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.metrics.DoubleSupplier; import co.elastic.apm.agent.metrics.Labels; import co.elastic.apm.agent.metrics.MetricRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/AbstractIntakeApiHandler.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/AbstractIntakeApiHandler.java index f6398149ef..49a6b2070a 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/AbstractIntakeApiHandler.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/AbstractIntakeApiHandler.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.report.serialize.DslJsonSerializer; import co.elastic.apm.agent.report.serialize.PayloadSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.util.IOUtils; import javax.annotation.Nullable; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerClient.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerClient.java index 52658a2887..2679d269d1 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerClient.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerClient.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.util.UrlConnectionUtils; import co.elastic.apm.agent.util.Version; import co.elastic.apm.agent.util.VersionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import javax.annotation.Nonnull; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java index 79171f77a4..bc86ba96dd 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerHealthChecker.java @@ -24,8 +24,8 @@ import com.dslplatform.json.JsonReader; import com.dslplatform.json.Nullable; import com.dslplatform.json.ObjectConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.net.HttpURLConnection; import java.util.Collections; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerReporter.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerReporter.java index 655152a99e..f5a1e6b647 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerReporter.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ApmServerReporter.java @@ -32,8 +32,8 @@ import com.lmax.disruptor.InsufficientCapacityException; import com.lmax.disruptor.dsl.Disruptor; import com.lmax.disruptor.dsl.ProducerType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.concurrent.ThreadFactory; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java index 20da346401..916d4d00a8 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/IntakeV2ReportingEventHandler.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.report.processor.ProcessorEventHandler; import co.elastic.apm.agent.report.serialize.PayloadSerializer; import co.elastic.apm.agent.util.ExecutorUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.net.HttpURLConnection; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ReporterConfiguration.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ReporterConfiguration.java index 77ddbaf7b7..b9425f8a26 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ReporterConfiguration.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ReporterConfiguration.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.configuration.converter.TimeDurationValueConverter; import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.matcher.WildcardMatcherValueConverter; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.converter.ListValueConverter; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java index 0f8351f6a0..deea291f50 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/serialize/DslJsonSerializer.java @@ -64,8 +64,8 @@ import com.dslplatform.json.JsonWriter; import com.dslplatform.json.NumberConverter; import com.dslplatform.json.StringConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.ByteArrayOutputStream; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java index b669d9bed7..26444282c5 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/SslUtils.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.report.ssl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import javax.net.ssl.HostnameVerifier; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/TLSFallbackSSLSocket.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/TLSFallbackSSLSocket.java index 8f0357f3c5..9dd8ac9366 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/TLSFallbackSSLSocket.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/report/ssl/TLSFallbackSSLSocket.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.report.ssl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.net.ssl.HandshakeCompletedListener; import javax.net.ssl.SSLHandshakeException; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java index 8d155760f5..129726f235 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/BinaryHeaderMap.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.objectpool.Recyclable; import co.elastic.apm.agent.report.serialize.DslJsonSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.nio.Buffer; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java index 33c1f6011e..4da3af2a5c 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/DependencyInjectingServiceLoader.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.BufferedReader; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java index 326aa11c53..790bd55a34 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/ExecutorUtils.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.util; import co.elastic.apm.agent.common.ThreadUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.concurrent.CancellationException; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/JmxUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/JmxUtils.java index 4bd93ea4fd..54d46ec4f7 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/JmxUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/JmxUtils.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.management.OperatingSystemMXBean; diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java index b84f4d0cff..8aed0f0e96 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/util/LoggerUtils.java @@ -18,8 +18,7 @@ */ package co.elastic.apm.agent.util; -import org.slf4j.Logger; -import org.slf4j.Marker; +import co.elastic.apm.agent.sdk.logging.Logger; import java.util.concurrent.atomic.AtomicBoolean; @@ -89,46 +88,6 @@ public void trace(String msg, Throwable t) { } } - @Override - public boolean isTraceEnabled(Marker marker) { - return isEnabled(delegate.isTraceEnabled(marker)); - } - - @Override - public void trace(Marker marker, String msg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.trace(marker, msg); - } - } - - @Override - public void trace(Marker marker, String format, Object arg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.trace(marker, format, arg); - } - } - - @Override - public void trace(Marker marker, String format, Object arg1, Object arg2) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.trace(marker, format, arg1, arg2); - } - } - - @Override - public void trace(Marker marker, String format, Object... argArray) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.trace(marker, format, argArray); - } - } - - @Override - public void trace(Marker marker, String msg, Throwable t) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.trace(marker, msg, t); - } - } - @Override public boolean isDebugEnabled() { return isEnabled(delegate.isDebugEnabled()); @@ -169,46 +128,6 @@ public void debug(String msg, Throwable t) { } } - @Override - public boolean isDebugEnabled(Marker marker) { - return isEnabled(delegate.isDebugEnabled(marker)); - } - - @Override - public void debug(Marker marker, String msg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.debug(marker, msg); - } - } - - @Override - public void debug(Marker marker, String format, Object arg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.debug(marker, format, arg); - } - } - - @Override - public void debug(Marker marker, String format, Object arg1, Object arg2) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.debug(marker, format, arg1, arg2); - } - } - - @Override - public void debug(Marker marker, String format, Object... arguments) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.debug(marker, format, arguments); - } - } - - @Override - public void debug(Marker marker, String msg, Throwable t) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.debug(marker, msg, t); - } - } - @Override public boolean isInfoEnabled() { return isEnabled(delegate.isInfoEnabled()); @@ -249,46 +168,6 @@ public void info(String msg, Throwable t) { } } - @Override - public boolean isInfoEnabled(Marker marker) { - return isEnabled(delegate.isInfoEnabled(marker)); - } - - @Override - public void info(Marker marker, String msg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.info(marker, msg); - } - } - - @Override - public void info(Marker marker, String format, Object arg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.info(marker, format, arg); - } - } - - @Override - public void info(Marker marker, String format, Object arg1, Object arg2) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.info(marker, format, arg1, arg2); - } - } - - @Override - public void info(Marker marker, String format, Object... arguments) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.info(marker, format, arguments); - } - } - - @Override - public void info(Marker marker, String msg, Throwable t) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.info(marker, msg, t); - } - } - @Override public boolean isWarnEnabled() { return isEnabled(delegate.isWarnEnabled()); @@ -329,46 +208,6 @@ public void warn(String msg, Throwable t) { } } - @Override - public boolean isWarnEnabled(Marker marker) { - return isEnabled(delegate.isWarnEnabled(marker)); - } - - @Override - public void warn(Marker marker, String msg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.warn(marker, msg); - } - } - - @Override - public void warn(Marker marker, String format, Object arg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.warn(marker, format, arg); - } - } - - @Override - public void warn(Marker marker, String format, Object arg1, Object arg2) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.warn(marker, format, arg1, arg2); - } - } - - @Override - public void warn(Marker marker, String format, Object... arguments) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.warn(marker, format, arguments); - } - } - - @Override - public void warn(Marker marker, String msg, Throwable t) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.warn(marker, msg, t); - } - } - @Override public boolean isErrorEnabled() { return isEnabled(delegate.isErrorEnabled()); @@ -408,45 +247,5 @@ public void error(String msg, Throwable t) { delegate.error(msg, t); } } - - @Override - public boolean isErrorEnabled(Marker marker) { - return isEnabled(delegate.isErrorEnabled(marker)); - } - - @Override - public void error(Marker marker, String msg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.error(marker, msg); - } - } - - @Override - public void error(Marker marker, String format, Object arg) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.error(marker, format, arg); - } - } - - @Override - public void error(Marker marker, String format, Object arg1, Object arg2) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.error(marker, format, arg1, arg2); - } - } - - @Override - public void error(Marker marker, String format, Object... arguments) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.error(marker, format, arguments); - } - } - - @Override - public void error(Marker marker, String msg, Throwable t) { - if (alreadyLogged.compareAndSet(false, true)) { - delegate.error(marker, msg, t); - } - } } } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/TestClassWithDependencyRunner.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/TestClassWithDependencyRunner.java index ecb57adc3f..a73f488c43 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/TestClassWithDependencyRunner.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/TestClassWithDependencyRunner.java @@ -18,6 +18,7 @@ */ package co.elastic.apm.agent; +import co.elastic.test.ChildFirstURLClassLoader; import org.apache.ivy.Ivy; import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor; import org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor; @@ -44,7 +45,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Enumeration; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; @@ -175,61 +175,4 @@ private static List resolveArtifacts(List dependencies) throws Exce assertThat(resolvedDependencies).hasSizeGreaterThanOrEqualTo(dependencies.size()); return resolvedDependencies; } - - private static class ChildFirstURLClassLoader extends URLClassLoader { - - private final List urls; - - public ChildFirstURLClassLoader(List urls) { - super(urls.toArray(new URL[]{})); - this.urls = urls; - } - - @Override - public String getName() { - return "Test class class loader: " + urls; - } - - @Override - protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - synchronized (getClassLoadingLock(name)) { - try { - // First, check if the class has already been loaded - Class c = findLoadedClass(name); - if (c == null) { - c = findClass(name); - if (resolve) { - resolveClass(c); - } - } - return c; - } catch (ClassNotFoundException e) { - return super.loadClass(name, resolve); - } - } - } - - - @Override - public URL findResource(String name) { - return super.findResource(name); - } - - @Override - public Enumeration getResources(String name) throws IOException { - Enumeration resources = super.getResources(name); - List resourcesList = new ArrayList<>(); - while (resources.hasMoreElements()) { - resourcesList.add(resources.nextElement()); - } - Collections.reverse(resourcesList); - return Collections.enumeration(resourcesList); - } - - @Override - public String toString() { - return getName(); - } - - } } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSourceTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSourceTest.java index ce199e4c99..d88ac7caf5 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSourceTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/ApmServerConfigurationSourceTest.java @@ -33,7 +33,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.slf4j.Logger; +import co.elastic.apm.agent.sdk.logging.Logger; import org.stagemonitor.configuration.ConfigurationRegistry; import java.net.URL; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/StartupInfoTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/StartupInfoTest.java index d9b5c72071..85f05bef76 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/StartupInfoTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/configuration/StartupInfoTest.java @@ -24,7 +24,7 @@ import co.elastic.apm.agent.logging.LoggingConfiguration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; +import co.elastic.apm.agent.sdk.logging.Logger; import org.stagemonitor.configuration.ConfigurationOption; import org.stagemonitor.configuration.ConfigurationOptionProvider; import org.stagemonitor.configuration.ConfigurationRegistry; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/circuitbreaker/TestStressMonitor.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/circuitbreaker/TestStressMonitor.java index 0bb6a68399..a359a254a1 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/circuitbreaker/TestStressMonitor.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/impl/circuitbreaker/TestStressMonitor.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.impl.circuitbreaker; import co.elastic.apm.agent.impl.ElasticApmTracer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; class TestStressMonitor extends StressMonitor { diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/JulBridgeLoggerTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/JulBridgeLoggerTest.java index c29465c9af..f05c329e52 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/JulBridgeLoggerTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/JulBridgeLoggerTest.java @@ -19,9 +19,9 @@ package co.elastic.apm.agent.logging; import co.elastic.apm.agent.AbstractInstrumentationTest; +import co.elastic.apm.agent.sdk.logging.Logger; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; import java.util.ResourceBundle; import java.util.logging.LogRecord; @@ -43,73 +43,73 @@ class JulBridgeLoggerTest extends AbstractInstrumentationTest { private JulBridgeLogger julLogger; private Exception e; - private Logger slf4jLogger; + private Logger agentFacadeLogger; @BeforeEach void setUp() { - slf4jLogger = mock(Logger.class); - julLogger = new JulBridgeLogger(slf4jLogger); + agentFacadeLogger = mock(Logger.class); + julLogger = new JulBridgeLogger(agentFacadeLogger); e = new Exception("This exception is used to test exception logging"); } @Test void testLogException() { julLogger.log(SEVERE, "test", e); - verify(slf4jLogger).error("test", e); + verify(agentFacadeLogger).error("test", e); julLogger.log(WARNING, "test", e); - verify(slf4jLogger).warn("test", e); + verify(agentFacadeLogger).warn("test", e); julLogger.log(INFO, "test", e); julLogger.log(CONFIG, "test", e); - verify(slf4jLogger, times(2)).info("test", e); + verify(agentFacadeLogger, times(2)).info("test", e); julLogger.log(FINE, "test", e); julLogger.log(FINER, "test", e); - verify(slf4jLogger, times(2)).debug("test", e); + verify(agentFacadeLogger, times(2)).debug("test", e); julLogger.log(FINEST, "test", e); - verify(slf4jLogger).trace("test", e); + verify(agentFacadeLogger).trace("test", e); } @Test void testLog() { julLogger.log(SEVERE, "test"); - verify(slf4jLogger).error("test"); + verify(agentFacadeLogger).error("test"); julLogger.log(WARNING, "test"); - verify(slf4jLogger).warn("test"); + verify(agentFacadeLogger).warn("test"); julLogger.log(INFO, "test"); julLogger.log(CONFIG, "test"); - verify(slf4jLogger, times(2)).info("test"); + verify(agentFacadeLogger, times(2)).info("test"); julLogger.log(FINE, "test"); julLogger.log(FINER, "test"); - verify(slf4jLogger, times(2)).debug("test"); + verify(agentFacadeLogger, times(2)).debug("test"); julLogger.log(FINEST, "test"); - verify(slf4jLogger).trace("test"); + verify(agentFacadeLogger).trace("test"); } @Test void testLog2() { julLogger.severe("test"); - verify(slf4jLogger).error("test"); + verify(agentFacadeLogger).error("test"); julLogger.warning("test"); - verify(slf4jLogger).warn("test"); + verify(agentFacadeLogger).warn("test"); julLogger.info("test"); julLogger.config("test"); - verify(slf4jLogger, times(2)).info("test"); + verify(agentFacadeLogger, times(2)).info("test"); julLogger.fine("test"); julLogger.finer("test"); - verify(slf4jLogger, times(2)).debug("test"); + verify(agentFacadeLogger, times(2)).debug("test"); julLogger.finest("test"); - verify(slf4jLogger).trace("test"); + verify(agentFacadeLogger).trace("test"); } // The bridge does not support parameter placeholders, @@ -117,47 +117,47 @@ void testLog2() { @Test void testLogWithParameter() { julLogger.log(SEVERE, "test {0}", new Object()); - verify(slf4jLogger).error("test {0}"); + verify(agentFacadeLogger).error("test {0}"); julLogger.log(WARNING, "test {0}", new Object()); - verify(slf4jLogger).warn("test {0}"); + verify(agentFacadeLogger).warn("test {0}"); julLogger.log(INFO, "test {0}", new Object()); julLogger.log(CONFIG, "test {0}", new Object()); - verify(slf4jLogger, times(2)).info("test {0}"); + verify(agentFacadeLogger, times(2)).info("test {0}"); julLogger.log(FINE, "test {0}", new Object()); julLogger.log(FINER, "test {0}", new Object()); - verify(slf4jLogger, times(2)).debug("test {0}"); + verify(agentFacadeLogger, times(2)).debug("test {0}"); julLogger.log(FINEST, "test {0}", new Object()); - verify(slf4jLogger).trace("test {0}"); + verify(agentFacadeLogger).trace("test {0}"); } @Test void testLogWithParameters() { julLogger.log(SEVERE, "test {0}", new Object[]{new Object()}); - verify(slf4jLogger).error("test {0}"); + verify(agentFacadeLogger).error("test {0}"); julLogger.log(WARNING, "test {0}", new Object[]{new Object()}); - verify(slf4jLogger).warn("test {0}"); + verify(agentFacadeLogger).warn("test {0}"); julLogger.log(INFO, "test {0}", new Object[]{new Object()}); julLogger.log(CONFIG, "test {0}", new Object[]{new Object()}); - verify(slf4jLogger, times(2)).info("test {0}"); + verify(agentFacadeLogger, times(2)).info("test {0}"); julLogger.log(FINE, "test {0}", new Object[]{new Object()}); julLogger.log(FINER, "test {0}", new Object[]{new Object()}); - verify(slf4jLogger, times(2)).debug("test {0}"); + verify(agentFacadeLogger, times(2)).debug("test {0}"); julLogger.log(FINEST, "test {0}", new Object[]{new Object()}); - verify(slf4jLogger).trace("test {0}"); + verify(agentFacadeLogger).trace("test {0}"); } @Test void testLogRecord() { julLogger.log(new LogRecord(INFO, "test")); - verify(slf4jLogger).info("test"); + verify(agentFacadeLogger).info("test"); } @Test @@ -166,8 +166,8 @@ void testLogp() { julLogger.logp(INFO, null, null, "test", new Object()); julLogger.logp(INFO, null, null, "test", new Object[]{}); julLogger.logp(INFO, null, null, "test", e); - verify(slf4jLogger, times(3)).info("test"); - verify(slf4jLogger, times(1)).info("test", e); + verify(agentFacadeLogger, times(3)).info("test"); + verify(agentFacadeLogger, times(1)).info("test", e); } @Test @@ -180,8 +180,8 @@ void testLogrb() { julLogger.logrb(INFO, "", "", "", "test", e); julLogger.logrb(INFO, "", "", (ResourceBundle) null, "test", e); julLogger.logrb(INFO, null, "test", e); - verify(slf4jLogger, times(5)).info("test"); - verify(slf4jLogger, times(3)).info("test", e); + verify(agentFacadeLogger, times(5)).info("test"); + verify(agentFacadeLogger, times(3)).info("test", e); } @Test @@ -214,6 +214,6 @@ void testNoops() { julLogger.removeHandler(null); julLogger.setUseParentHandlers(true); julLogger.setParent(null); - verifyNoMoreInteractions(slf4jLogger); + verifyNoMoreInteractions(agentFacadeLogger); } } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/LoggingConfigurationTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/LoggingConfigurationTest.java index 49d42bc74e..9b34a32524 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/LoggingConfigurationTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/LoggingConfigurationTest.java @@ -24,6 +24,9 @@ import co.elastic.apm.agent.configuration.SpyConfiguration; import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.logging.instr.LoggerTestInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; +import com.fasterxml.jackson.databind.JsonNode; import net.bytebuddy.agent.ByteBuddyAgent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; @@ -33,37 +36,57 @@ import org.apache.logging.log4j.core.selector.ContextSelector; import org.apache.logging.log4j.spi.LoggerContextFactory; import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; +import org.stagemonitor.configuration.ConfigurationRegistry; import javax.annotation.Nullable; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import static co.elastic.apm.agent.logging.LoggingConfiguration.LOG_LEVEL_KEY; import static org.assertj.core.api.Assertions.assertThat; +@SuppressWarnings("NotNullFieldNotInitialized") class LoggingConfigurationTest { + public static final String LOGGING_TEST_FILE = "target/LoggingConfigurationTest.log"; + private static LoggerContextFactory originalLoggerContextFactory; - private static Logger agentLogger; + private static TestLog4jContextFactory testLog4jContextFactory; private static ConfigurationOption logLevelConfig; - private static TestLog4jContextFactory testLog4jContextFactory; + private static Logger agentLogger; + private static org.slf4j.Logger configOptionLogger; + private static Logger pluginLogger; + + @Nullable + private static String originalLogFile; + @Nullable + private static String originalLogFileFormat; @BeforeAll - static void setup() { + static void setup() throws NoSuchFieldException, IllegalAccessException, IOException { ElasticApmTracer tracer = MockTracer.createRealTracer(); + + ConfigurationRegistry configurationRegistry = tracer.getConfigurationRegistry(); //noinspection unchecked - logLevelConfig = (ConfigurationOption) tracer.getConfigurationRegistry().getConfigurationOptionByKey("log_level"); + logLevelConfig = (ConfigurationOption) configurationRegistry.getConfigurationOptionByKey(LOG_LEVEL_KEY); + originalLogFile = System.getProperty("elastic.apm.log_file"); + originalLogFileFormat = System.getProperty("elastic.apm.log_format_file"); + Files.deleteIfExists(Path.of(LOGGING_TEST_FILE)); + System.setProperty("elastic.apm.log_file", LOGGING_TEST_FILE); + System.setProperty("elastic.apm.log_format_file", "JSON"); ElasticApmAgent.initInstrumentation(tracer, ByteBuddyAgent.install(), List.of(new LoggerTestInstrumentation())); // We need to clean the current contexts for this test to resemble early agent setup @@ -76,38 +99,74 @@ static void setup() { testLog4jContextFactory = new TestLog4jContextFactory(); LogManager.setFactory(testLog4jContextFactory); + // Testing that stagemonitor's slf4j loggers are setup properly and get the agent configuration + Field configOptionLoggerField = ConfigurationOption.class.getDeclaredField("logger"); + configOptionLoggerField.setAccessible(true); + configOptionLogger = (org.slf4j.Logger) configOptionLoggerField.get(ConfigurationOption.booleanOption().buildOptional()); + // Not really an agent logger, but representing the agent-level logger agentLogger = LoggerFactory.getLogger(LoggingConfigurationTest.class); + + // A logger created by a plugin CL - see LoggerTestInstrumentation + pluginLogger = Objects.requireNonNull(new LoggerTest().getLogger()); } @AfterAll static void reset() { - ElasticApmAgent.reset(); - } + if (originalLogFile == null) { + System.clearProperty("elastic.apm.log_file"); + } else { + System.setProperty("elastic.apm.log_file", originalLogFile); + } + if (originalLogFileFormat == null) { + System.clearProperty("elastic.apm.log_format_file"); + } else { + System.setProperty("elastic.apm.log_format_file", originalLogFileFormat); + } - @AfterEach - void tearDown() { - // restoring the original logger context factory so that other tests are unaffected LogManager.setFactory(originalLoggerContextFactory); + ElasticApmAgent.reset(); } @Test void loggingLevelChangeTest() throws IOException { // Assuming default is debug level in tests based on test.elasticapm.properties assertThat(agentLogger.isTraceEnabled()).isFalse(); - // A logger created by a plugin CL - see LoggerTestInstrumentation - Logger pluginLogger = new LoggerTest().getLogger(); - assertThat(pluginLogger).isNotNull(); - LoggerContext pluginLoggerContext = testLog4jContextFactory.getContext(pluginLogger); + LoggerContext agentLoggerContext = testLog4jContextFactory.getContext(agentLogger.getName()); + + // stagemonitor relies on slf4j, which should be bridged to the same log4j registries and get the same configuration + assertThat(configOptionLogger.isTraceEnabled()).isFalse(); + assertThat(testLog4jContextFactory.getContext(configOptionLogger.getName())).isEqualTo(agentLoggerContext); + + LoggerContext pluginLoggerContext = testLog4jContextFactory.getContext(pluginLogger.getName()); assertThat(pluginLoggerContext).isNotNull(); + assertThat(pluginLoggerContext).isNotEqualTo(agentLoggerContext); assertThat(pluginLoggerContext.getName()).startsWith(IndyPluginClassLoader.class.getName()); assertThat(pluginLogger.isTraceEnabled()).isFalse(); logLevelConfig.update(LogLevel.TRACE, SpyConfiguration.CONFIG_SOURCE_NAME); assertThat(agentLogger.isTraceEnabled()).isTrue(); + assertThat(configOptionLogger.isTraceEnabled()).isTrue(); assertThat(pluginLogger.isTraceEnabled()).isTrue(); } + @Test + void testFileLogging() throws IOException { + agentLogger.info("agent"); + configOptionLogger.info("config"); + pluginLogger.info("plugin"); + ArrayList logJsonLines = TestUtils.readJsonFile(LOGGING_TEST_FILE); + assertThat(logJsonLines).hasSize(3); + for (JsonNode logJsonLine : logJsonLines) { + assertThat(logJsonLine.get("@timestamp")).isNotNull(); + assertThat(logJsonLine.get("process.thread.name").textValue()).isEqualTo("main"); + assertThat(logJsonLine.get("log.level").textValue()).isEqualTo("INFO"); + assertThat(logJsonLine.get("log.logger")).isNotNull(); + assertThat(logJsonLine.get("message")).isNotNull(); + assertThat(logJsonLine.get("ecs.version")).isNotNull(); + } + } + private static class LoggerTest { @Nullable Logger getLogger() { @@ -120,10 +179,10 @@ private static final class TestLog4jContextFactory extends Log4jContextFactory { ContextSelector contextSelector = new TestContextSelector(); @Nullable - LoggerContext getContext(Logger slf4jLogger) { + LoggerContext getContext(String loggerName) { for (LoggerContext loggerContext : contextSelector.getLoggerContexts()) { for (org.apache.logging.log4j.core.Logger log4jLogger : loggerContext.getLoggers()) { - if (log4jLogger.getName().equals(slf4jLogger.getName())) { + if (log4jLogger.getName().equals(loggerName)) { return loggerContext; } } @@ -168,7 +227,7 @@ public void removeContext(org.apache.logging.log4j.spi.LoggerContext context) { } } - private class TestContextSelector implements ContextSelector { + private static class TestContextSelector implements ContextSelector { private final Map contextMap = new HashMap<>(); @Override diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/TestUtils.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/TestUtils.java new file mode 100644 index 0000000000..00ec7d1f81 --- /dev/null +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/TestUtils.java @@ -0,0 +1,48 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.logging; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.stream.Stream; + +public class TestUtils { + + private final static ObjectMapper objectMapper = new ObjectMapper(); ; + + public static ArrayList readJsonFile(String jsonFilePath) throws IOException { + ArrayList jsonFileLines = new ArrayList<>(); + try (Stream stream = Files.lines(Paths.get(jsonFilePath))) { + stream.forEach(line -> { + try { + jsonFileLines.add(objectMapper.readTree(line)); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + }); + } + return jsonFileLines; + } +} diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java index 3a36e00e34..9a85489b29 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/logging/instr/LoggerTestInstrumentation.java @@ -19,13 +19,13 @@ package co.elastic.apm.agent.logging.instr; import co.elastic.apm.agent.bci.TracerAwareInstrumentation; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.List; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/BookkeeperObjectPool.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/BookkeeperObjectPool.java index 9d085b8637..ac4ce8292f 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/BookkeeperObjectPool.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/objectpool/impl/BookkeeperObjectPool.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.objectpool.impl; import co.elastic.apm.agent.objectpool.ObjectPool; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Collection; import java.util.Collections; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerClientProxySupportIT.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerClientProxySupportIT.java index 9c5fe1feda..3c12ef7cc1 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerClientProxySupportIT.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/report/ApmServerClientProxySupportIT.java @@ -26,8 +26,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationRegistry; import org.testcontainers.Testcontainers; import org.testcontainers.containers.BindMode; diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/testutils/TestContainersUtils.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/testutils/TestContainersUtils.java index a4965d7258..894401887f 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/testutils/TestContainersUtils.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/testutils/TestContainersUtils.java @@ -19,7 +19,7 @@ package co.elastic.apm.agent.testutils; import com.github.dockerjava.api.command.CreateContainerCmd; -import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.output.Slf4jLogConsumer; import java.util.Objects; import java.util.function.Consumer; @@ -32,4 +32,8 @@ private TestContainersUtils() { public static Consumer withMemoryLimit(int limitMb) { return cmd -> Objects.requireNonNull(cmd.getHostConfig()).withMemory(limitMb * 1024 * 1024L); } + + public static Slf4jLogConsumer createSlf4jLogConsumer(Class loggerOwner) { + return new Slf4jLogConsumer(org.slf4j.LoggerFactory.getLogger(loggerOwner)); + } } diff --git a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java b/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java index 910f3dc32a..66a3e3054b 100644 --- a/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java +++ b/apm-agent-core/src/test/java/co/elastic/apm/agent/util/LoggerUtilsTest.java @@ -19,8 +19,7 @@ package co.elastic.apm.agent.util; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.Marker; +import co.elastic.apm.agent.sdk.logging.Logger; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; @@ -45,35 +44,24 @@ void testLogOnce() { @Test void testDisabledAfterLogOnce() { Logger mock = mock(Logger.class); - Marker marker = mock(Marker.class); doReturn(true).when(mock).isTraceEnabled(); - doReturn(true).when(mock).isTraceEnabled(marker); doReturn(true).when(mock).isDebugEnabled(); - doReturn(true).when(mock).isDebugEnabled(marker); doReturn(true).when(mock).isInfoEnabled(); - doReturn(true).when(mock).isInfoEnabled(marker); doReturn(true).when(mock).isWarnEnabled(); - doReturn(true).when(mock).isWarnEnabled(marker); doReturn(true).when(mock).isErrorEnabled(); - doReturn(true).when(mock).isErrorEnabled(marker); Logger logger = LoggerUtils.logOnce(mock); - checkAllLevels(logger, marker, true); + checkAllLevels(logger, true); logger.info("once"); - checkAllLevels(logger, marker, false); + checkAllLevels(logger, false); } - private void checkAllLevels(Logger logger, Marker marker, boolean isEnabled) { + private void checkAllLevels(Logger logger, boolean isEnabled) { assertThat(logger.isTraceEnabled()).isEqualTo(isEnabled); - assertThat(logger.isTraceEnabled(marker)).isEqualTo(isEnabled); assertThat(logger.isDebugEnabled()).isEqualTo(isEnabled); - assertThat(logger.isDebugEnabled(marker)).isEqualTo(isEnabled); assertThat(logger.isInfoEnabled()).isEqualTo(isEnabled); - assertThat(logger.isInfoEnabled(marker)).isEqualTo(isEnabled); assertThat(logger.isWarnEnabled()).isEqualTo(isEnabled); - assertThat(logger.isWarnEnabled(marker)).isEqualTo(isEnabled); assertThat(logger.isErrorEnabled()).isEqualTo(isEnabled); - assertThat(logger.isErrorEnabled(marker)).isEqualTo(isEnabled); } } diff --git a/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java b/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java new file mode 100644 index 0000000000..74a3f869d1 --- /dev/null +++ b/apm-agent-core/src/test/java/co/elastic/test/ChildFirstURLClassLoader.java @@ -0,0 +1,93 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.test; + +import co.elastic.apm.agent.bci.bytebuddy.CustomElementMatchers; + +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +/** + * A Child-first class loader used for tests. + * Specifically, used within {@link co.elastic.apm.agent.TestClassWithDependencyRunner} for tests that require encapsulated + * test classpath, for example - for testing specific library versions. + * In order for classes that are loaded by this class loader to be instrumented, it must be outside of the {@code co.elastic.apm} + * package, otherwise it may be excluded if tested through {@link CustomElementMatchers#isAgentClassLoader()}. + */ +public class ChildFirstURLClassLoader extends URLClassLoader { + + private final List urls; + + public ChildFirstURLClassLoader(List urls) { + super(urls.toArray(new URL[]{})); + this.urls = urls; + } + + @Override + public String getName() { + return "Test class class loader: " + urls; + } + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + synchronized (getClassLoadingLock(name)) { + try { + // First, check if the class has already been loaded + Class c = findLoadedClass(name); + if (c == null) { + c = findClass(name); + if (resolve) { + resolveClass(c); + } + } + return c; + } catch (ClassNotFoundException e) { + return super.loadClass(name, resolve); + } + } + } + + + @Override + public URL findResource(String name) { + return super.findResource(name); + } + + @Override + public Enumeration getResources(String name) throws IOException { + Enumeration resources = super.getResources(name); + List resourcesList = new ArrayList<>(); + while (resources.hasMoreElements()) { + resourcesList.add(resources.nextElement()); + } + Collections.reverse(resourcesList); + return Collections.enumeration(resourcesList); + } + + @Override + public String toString() { + return getName(); + } + +} diff --git a/apm-agent-plugin-sdk/pom.xml b/apm-agent-plugin-sdk/pom.xml index 7da5b00743..508298849e 100644 --- a/apm-agent-plugin-sdk/pom.xml +++ b/apm-agent-plugin-sdk/pom.xml @@ -21,11 +21,6 @@ - - org.slf4j - slf4j-api - ${version.slf4j} - net.bytebuddy byte-buddy-dep diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/ILoggerFactory.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/ILoggerFactory.java new file mode 100644 index 0000000000..3bb20c2ed4 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/ILoggerFactory.java @@ -0,0 +1,39 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.sdk.logging; + +public interface ILoggerFactory { + /** + * Return an appropriate {@link Logger} instance as specified by the + * name parameter. + * + *

If the name parameter is equal to {@link Logger#ROOT_LOGGER_NAME}, that is + * the string value "ROOT" (case insensitive), then the root logger of the + * underlying logging system is returned. + * + *

Null-valued name arguments are considered invalid. + * + *

Certain extremely simple logging systems, e.g. NOP, may always + * return the same logger instance regardless of the requested name. + * + * @param name the name of the Logger to return + * @return a Logger instance + */ + Logger getLogger(String name); +} diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/Logger.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/Logger.java new file mode 100644 index 0000000000..0d69199dd4 --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/Logger.java @@ -0,0 +1,357 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.sdk.logging; + +public interface Logger { + + /** + * Case insensitive String constant used to retrieve the name of the root logger. + */ + String ROOT_LOGGER_NAME = "ROOT"; + + /** + * Return the name of this {@code Logger} instance. + * @return name of this logger instance + */ + String getName(); + + /** + * Is the logger instance enabled for the TRACE level? + * + * @return True if this Logger is enabled for the TRACE level, + * false otherwise. + */ + boolean isTraceEnabled(); + + /** + * Log a message at the TRACE level. + * + * @param msg the message string to be logged + */ + void trace(String msg); + + /** + * Log a message at the TRACE level according to the specified format + * and argument. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the TRACE level.

+ * + * @param format the format string + * @param arg the argument + */ + void trace(String format, Object arg); + + /** + * Log a message at the TRACE level according to the specified format + * and arguments. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the TRACE level.

+ * + * @param format the format string + * @param arg1 the first argument + * @param arg2 the second argument + */ + void trace(String format, Object arg1, Object arg2); + + /** + * Log a message at the TRACE level according to the specified format + * and arguments. + * + *

This form avoids superfluous string concatenation when the logger + * is disabled for the TRACE level. However, this variant incurs the hidden + * (and relatively small) cost of creating an Object[] before invoking the method, + * even if this logger is disabled for TRACE. The variants taking {@link #trace(String, Object) one} and + * {@link #trace(String, Object, Object) two} arguments exist solely in order to avoid this hidden cost.

+ * + * @param format the format string + * @param arguments a list of 3 or more arguments + */ + void trace(String format, Object... arguments); + + /** + * Log an exception (throwable) at the TRACE level with an + * accompanying message. + * + * @param msg the message accompanying the exception + * @param t the exception (throwable) to log + */ + void trace(String msg, Throwable t); + + /** + * Is the logger instance enabled for the DEBUG level? + * + * @return True if this Logger is enabled for the DEBUG level, + * false otherwise. + */ + boolean isDebugEnabled(); + + /** + * Log a message at the DEBUG level. + * + * @param msg the message string to be logged + */ + void debug(String msg); + + /** + * Log a message at the DEBUG level according to the specified format + * and argument. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the DEBUG level.

+ * + * @param format the format string + * @param arg the argument + */ + void debug(String format, Object arg); + + /** + * Log a message at the DEBUG level according to the specified format + * and arguments. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the DEBUG level.

+ * + * @param format the format string + * @param arg1 the first argument + * @param arg2 the second argument + */ + void debug(String format, Object arg1, Object arg2); + + /** + * Log a message at the DEBUG level according to the specified format + * and arguments. + * + *

This form avoids superfluous string concatenation when the logger + * is disabled for the DEBUG level. However, this variant incurs the hidden + * (and relatively small) cost of creating an Object[] before invoking the method, + * even if this logger is disabled for DEBUG. The variants taking + * {@link #debug(String, Object) one} and {@link #debug(String, Object, Object) two} + * arguments exist solely in order to avoid this hidden cost.

+ * + * @param format the format string + * @param arguments a list of 3 or more arguments + */ + void debug(String format, Object... arguments); + + /** + * Log an exception (throwable) at the DEBUG level with an + * accompanying message. + * + * @param msg the message accompanying the exception + * @param t the exception (throwable) to log + */ + void debug(String msg, Throwable t); + + /** + * Is the logger instance enabled for the INFO level? + * + * @return True if this Logger is enabled for the INFO level, + * false otherwise. + */ + boolean isInfoEnabled(); + + /** + * Log a message at the INFO level. + * + * @param msg the message string to be logged + */ + void info(String msg); + + /** + * Log a message at the INFO level according to the specified format + * and argument. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the INFO level.

+ * + * @param format the format string + * @param arg the argument + */ + void info(String format, Object arg); + + /** + * Log a message at the INFO level according to the specified format + * and arguments. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the INFO level.

+ * + * @param format the format string + * @param arg1 the first argument + * @param arg2 the second argument + */ + void info(String format, Object arg1, Object arg2); + + /** + * Log a message at the INFO level according to the specified format + * and arguments. + * + *

This form avoids superfluous string concatenation when the logger + * is disabled for the INFO level. However, this variant incurs the hidden + * (and relatively small) cost of creating an Object[] before invoking the method, + * even if this logger is disabled for INFO. The variants taking + * {@link #info(String, Object) one} and {@link #info(String, Object, Object) two} + * arguments exist solely in order to avoid this hidden cost.

+ * + * @param format the format string + * @param arguments a list of 3 or more arguments + */ + void info(String format, Object... arguments); + + /** + * Log an exception (throwable) at the INFO level with an + * accompanying message. + * + * @param msg the message accompanying the exception + * @param t the exception (throwable) to log + */ + void info(String msg, Throwable t); + + /** + * Is the logger instance enabled for the WARN level? + * + * @return True if this Logger is enabled for the WARN level, + * false otherwise. + */ + boolean isWarnEnabled(); + + /** + * Log a message at the WARN level. + * + * @param msg the message string to be logged + */ + void warn(String msg); + + /** + * Log a message at the WARN level according to the specified format + * and argument. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the WARN level.

+ * + * @param format the format string + * @param arg the argument + */ + void warn(String format, Object arg); + + /** + * Log a message at the WARN level according to the specified format + * and arguments. + * + *

This form avoids superfluous string concatenation when the logger + * is disabled for the WARN level. However, this variant incurs the hidden + * (and relatively small) cost of creating an Object[] before invoking the method, + * even if this logger is disabled for WARN. The variants taking + * {@link #warn(String, Object) one} and {@link #warn(String, Object, Object) two} + * arguments exist solely in order to avoid this hidden cost.

+ * + * @param format the format string + * @param arguments a list of 3 or more arguments + */ + void warn(String format, Object... arguments); + + /** + * Log a message at the WARN level according to the specified format + * and arguments. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the WARN level.

+ * + * @param format the format string + * @param arg1 the first argument + * @param arg2 the second argument + */ + void warn(String format, Object arg1, Object arg2); + + /** + * Log an exception (throwable) at the WARN level with an + * accompanying message. + * + * @param msg the message accompanying the exception + * @param t the exception (throwable) to log + */ + void warn(String msg, Throwable t); + + /** + * Is the logger instance enabled for the ERROR level? + * + * @return True if this Logger is enabled for the ERROR level, + * false otherwise. + */ + boolean isErrorEnabled(); + + /** + * Log a message at the ERROR level. + * + * @param msg the message string to be logged + */ + void error(String msg); + + /** + * Log a message at the ERROR level according to the specified format + * and argument. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the ERROR level.

+ * + * @param format the format string + * @param arg the argument + */ + void error(String format, Object arg); + + /** + * Log a message at the ERROR level according to the specified format + * and arguments. + * + *

This form avoids superfluous object creation when the logger + * is disabled for the ERROR level.

+ * + * @param format the format string + * @param arg1 the first argument + * @param arg2 the second argument + */ + void error(String format, Object arg1, Object arg2); + + /** + * Log a message at the ERROR level according to the specified format + * and arguments. + * + *

This form avoids superfluous string concatenation when the logger + * is disabled for the ERROR level. However, this variant incurs the hidden + * (and relatively small) cost of creating an Object[] before invoking the method, + * even if this logger is disabled for ERROR. The variants taking + * {@link #error(String, Object) one} and {@link #error(String, Object, Object) two} + * arguments exist solely in order to avoid this hidden cost.

+ * + * @param format the format string + * @param arguments a list of 3 or more arguments + */ + void error(String format, Object... arguments); + + /** + * Log an exception (throwable) at the ERROR level with an + * accompanying message. + * + * @param msg the message accompanying the exception + * @param t the exception (throwable) to log + */ + void error(String msg, Throwable t); +} diff --git a/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/LoggerFactory.java b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/LoggerFactory.java new file mode 100644 index 0000000000..c61257d21e --- /dev/null +++ b/apm-agent-plugin-sdk/src/main/java/co/elastic/apm/agent/sdk/logging/LoggerFactory.java @@ -0,0 +1,214 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package co.elastic.apm.agent.sdk.logging; + +public class LoggerFactory { + + private static volatile ILoggerFactory iLoggerFactory; + + public static void initialize(ILoggerFactory iLoggerFactory) { + LoggerFactory.iLoggerFactory = iLoggerFactory; + } + + /** + * Return a logger named according to the name parameter. + * + * @param name The name of the logger. + * @return logger + */ + public static Logger getLogger(String name) { + if (iLoggerFactory == null) { + return NoopLogger.INSTANCE; + } + return iLoggerFactory.getLogger(name); + } + + /** + * Return a logger named corresponding to the class passed as parameter. + * + * @param clazz the returned logger will be named after clazz + * @return logger + */ + public static Logger getLogger(Class clazz) { + return getLogger(clazz.getName()); + } + + private static class NoopLogger implements Logger { + + static final NoopLogger INSTANCE = new NoopLogger(); + + private NoopLogger() { + } + + @Override + public String getName() { + return "null"; + } + + @Override + public boolean isTraceEnabled() { + return false; + } + + @Override + public void trace(String msg) { + + } + + @Override + public void trace(String format, Object arg) { + + } + + @Override + public void trace(String format, Object arg1, Object arg2) { + + } + + @Override + public void trace(String format, Object... arguments) { + + } + + @Override + public void trace(String msg, Throwable t) { + + } + + @Override + public boolean isDebugEnabled() { + return false; + } + + @Override + public void debug(String msg) { + + } + + @Override + public void debug(String format, Object arg) { + + } + + @Override + public void debug(String format, Object arg1, Object arg2) { + + } + + @Override + public void debug(String format, Object... arguments) { + + } + + @Override + public void debug(String msg, Throwable t) { + + } + + @Override + public boolean isInfoEnabled() { + return false; + } + + @Override + public void info(String msg) { + + } + + @Override + public void info(String format, Object arg) { + + } + + @Override + public void info(String format, Object arg1, Object arg2) { + + } + + @Override + public void info(String format, Object... arguments) { + + } + + @Override + public void info(String msg, Throwable t) { + + } + + @Override + public boolean isWarnEnabled() { + return false; + } + + @Override + public void warn(String msg) { + + } + + @Override + public void warn(String format, Object arg) { + + } + + @Override + public void warn(String format, Object... arguments) { + + } + + @Override + public void warn(String format, Object arg1, Object arg2) { + + } + + @Override + public void warn(String msg, Throwable t) { + + } + + @Override + public boolean isErrorEnabled() { + return false; + } + + @Override + public void error(String msg) { + + } + + @Override + public void error(String format, Object arg) { + + } + + @Override + public void error(String format, Object arg1, Object arg2) { + + } + + @Override + public void error(String format, Object... arguments) { + + } + + @Override + public void error(String msg, Throwable t) { + + } + } +} diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java index 531f69d161..935e6d0eca 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureSpanInstrumentation.java @@ -33,8 +33,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java index 63a14fa2bc..33e5db9bb3 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureTransactionInstrumentation.java @@ -32,8 +32,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderExtractorBridge.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderExtractorBridge.java index da198e8629..fb86e718e2 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderExtractorBridge.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderExtractorBridge.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.impl.transaction.AbstractHeaderGetter; import co.elastic.apm.agent.impl.transaction.TextHeaderGetter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.invoke.MethodHandle; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderInjectorBridge.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderInjectorBridge.java index b721bc0195..251341c8a7 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderInjectorBridge.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeaderInjectorBridge.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.pluginapi; import co.elastic.apm.agent.impl.transaction.TextHeaderSetter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.invoke.MethodHandle; diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeadersExtractorBridge.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeadersExtractorBridge.java index 3cf3c40d85..2948febeed 100644 --- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeadersExtractorBridge.java +++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/HeadersExtractorBridge.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.pluginapi; import co.elastic.apm.agent.impl.transaction.TextHeaderGetter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.invoke.MethodHandle; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java index 2e3a514294..ab071104de 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractAPIGatewayTransactionHelper.java @@ -28,8 +28,8 @@ import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; import com.amazonaws.services.lambda.runtime.Context; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.nio.CharBuffer; diff --git a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java index b8ea3a8690..31c300f891 100644 --- a/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java +++ b/apm-agent-plugins/apm-awslambda-plugin/src/main/java/co/elastic/apm/agent/awslambda/helper/AbstractLambdaTransactionHelper.java @@ -30,8 +30,8 @@ import co.elastic.apm.agent.util.VersionUtils; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.concurrent.TimeUnit; diff --git a/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra3InstrumentationIT.java b/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra3InstrumentationIT.java index aa43bd476f..31fd960085 100644 --- a/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra3InstrumentationIT.java +++ b/apm-agent-plugins/apm-cassandra/apm-cassandra3-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra3InstrumentationIT.java @@ -27,15 +27,11 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import java.time.Duration; -import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -44,12 +40,10 @@ @Testcontainers class Cassandra3InstrumentationIT extends AbstractInstrumentationTest { - private static final Logger logger = LoggerFactory.getLogger(Cassandra3InstrumentationIT.class); - @Container public static GenericContainer cassandra = new GenericContainer<>("cassandra:3.11") .withExposedPorts(9042) - .withLogConsumer(new Slf4jLogConsumer(logger)) + .withLogConsumer(TestContainersUtils.createSlf4jLogConsumer(Cassandra3InstrumentationIT.class)) .withStartupTimeout(Duration.ofSeconds(120)) .withCreateContainerCmdModifier(TestContainersUtils.withMemoryLimit(2048)) .withEnv("HEAP_NEWSIZE", "700m") diff --git a/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra4InstrumentationIT.java b/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra4InstrumentationIT.java index 10df9c6203..4b8c594029 100644 --- a/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra4InstrumentationIT.java +++ b/apm-agent-plugins/apm-cassandra/apm-cassandra4-plugin/src/test/java/co/elastic/apm/agent/cassandra/Cassandra4InstrumentationIT.java @@ -25,15 +25,11 @@ import com.datastax.oss.driver.api.core.config.DefaultDriverOption; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.session.Session; -import com.datastax.oss.driver.internal.core.config.typesafe.DefaultDriverConfigLoader; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -47,12 +43,10 @@ @Testcontainers class Cassandra4InstrumentationIT extends AbstractInstrumentationTest { - private static final Logger logger = LoggerFactory.getLogger(Cassandra4InstrumentationIT.class); - @Container public static GenericContainer cassandra = new GenericContainer<>("cassandra:4.0") .withExposedPorts(9042) - .withLogConsumer(new Slf4jLogConsumer(logger)) + .withLogConsumer(TestContainersUtils.createSlf4jLogConsumer(Cassandra4InstrumentationIT.class)) .withStartupTimeout(Duration.ofSeconds(120)) .withCreateContainerCmdModifier(TestContainersUtils.withMemoryLimit(2048)) .withEnv("HEAP_NEWSIZE", "700m") diff --git a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java index db66f237ac..7e693389d3 100644 --- a/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java +++ b/apm-agent-plugins/apm-es-restclient-plugin/apm-es-restclient-plugin-common/src/main/java/co/elastic/apm/agent/esrestclient/ElasticsearchRestClientInstrumentationHelper.java @@ -34,8 +34,8 @@ import org.elasticsearch.client.ResponseException; import org.elasticsearch.client.ResponseListener; import org.jctools.queues.atomic.AtomicQueueFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/AbstractGrpcClientInstrumentationTest.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/AbstractGrpcClientInstrumentationTest.java index effa54ff40..469bb28061 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/AbstractGrpcClientInstrumentationTest.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/AbstractGrpcClientInstrumentationTest.java @@ -30,8 +30,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Arrays; import java.util.concurrent.CyclicBarrier; diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/AbstractGrpcAppTest.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/AbstractGrpcAppTest.java index 1d0690b531..450a6ae9e2 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/AbstractGrpcAppTest.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/AbstractGrpcAppTest.java @@ -22,8 +22,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Arrays; import java.util.List; diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloClient.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloClient.java index 49d95000c1..7d2614b127 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloClient.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloClient.java @@ -28,8 +28,8 @@ import io.grpc.MethodDescriptor; import io.grpc.StatusRuntimeException; import io.grpc.stub.StreamObserver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.List; import java.util.concurrent.CountDownLatch; diff --git a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloServer.java b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloServer.java index 913baab664..e89e434436 100644 --- a/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloServer.java +++ b/apm-agent-plugins/apm-grpc/apm-grpc-plugin/src/test/java/co/elastic/apm/agent/grpc/testapp/HelloServer.java @@ -28,8 +28,8 @@ import io.grpc.ServerInterceptor; import io.grpc.Status; import io.grpc.stub.StreamObserver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.io.IOException; import java.util.ArrayList; diff --git a/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/http/client/HttpClientHelper.java b/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/http/client/HttpClientHelper.java index 1be82346ae..f1b6d1f7be 100644 --- a/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/http/client/HttpClientHelper.java +++ b/apm-agent-plugins/apm-httpclient-core/src/main/java/co/elastic/apm/agent/http/client/HttpClientHelper.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.impl.context.Destination; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Span; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.net.URI; diff --git a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java index 25161b2a42..743efde0e8 100644 --- a/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java +++ b/apm-agent-plugins/apm-javalin-plugin/src/main/java/co/elastic/apm/agent/javalin/JavalinInstrumentation.java @@ -33,8 +33,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.invoke.MethodHandle; diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/ConnectionMetaData.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/ConnectionMetaData.java index c20f822526..c3e1b3fb06 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/ConnectionMetaData.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/ConnectionMetaData.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.jdbc.helper; import co.elastic.apm.agent.sdk.state.GlobalState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.ArrayDeque; diff --git a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java index d3c6a08f25..abe2db4615 100644 --- a/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java +++ b/apm-agent-plugins/apm-jdbc-plugin/src/main/java/co/elastic/apm/agent/jdbc/helper/JdbcHelper.java @@ -25,8 +25,8 @@ import co.elastic.apm.agent.impl.transaction.Span; import co.elastic.apm.agent.jdbc.JdbcFilter; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.sql.Connection; diff --git a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java index a538055176..a06738d843 100644 --- a/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java +++ b/apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java @@ -33,8 +33,8 @@ import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpsExchange; import net.bytebuddy.asm.Advice; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Collections; diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java index 75b3e4e253..4909c589be 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java @@ -26,8 +26,8 @@ import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import javax.jms.Destination; diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java index d469a21c88..70a1cafd68 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageConsumerInstrumentation.java @@ -28,8 +28,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import javax.jms.Destination; diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java index 0e835bb71a..8429b8c1cf 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageListenerInstrumentation.java @@ -23,8 +23,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import javax.jms.Destination; diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java index 06a0b6f2b7..cfa8f3fec4 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessageProducerInstrumentation.java @@ -24,8 +24,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import javax.jms.Destination; diff --git a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessagePropertyAccessor.java b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessagePropertyAccessor.java index 21fb71926d..ee0b5c6ea9 100644 --- a/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessagePropertyAccessor.java +++ b/apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsMessagePropertyAccessor.java @@ -22,8 +22,8 @@ import co.elastic.apm.agent.impl.transaction.TextHeaderGetter; import co.elastic.apm.agent.impl.transaction.TextHeaderSetter; import co.elastic.apm.agent.impl.transaction.TraceContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java b/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java index be99094654..8e5c60d19a 100644 --- a/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java +++ b/apm-agent-plugins/apm-jmx-plugin/src/main/java/co/elastic/apm/agent/jmx/JmxMetricTracker.java @@ -24,8 +24,8 @@ import co.elastic.apm.agent.metrics.Labels; import co.elastic.apm.agent.metrics.MetricRegistry; import co.elastic.apm.agent.util.GlobalLocks; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.stagemonitor.configuration.ConfigurationOption; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java index 6d58c08e6f..fb2d81b5f7 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-base-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHelper.java @@ -32,8 +32,8 @@ import org.apache.kafka.common.Node; import org.apache.kafka.common.PartitionInfo; import org.jctools.queues.atomic.AtomicQueueFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.List; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java index e333fb73a5..bec7ec0916 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/KafkaProducerHeadersInstrumentation.java @@ -31,8 +31,8 @@ import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.record.RecordBatch; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java index 0b401815c2..b336cd2589 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ConsumerRecordsIteratorWrapper.java @@ -28,8 +28,8 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.header.Header; import org.apache.kafka.common.record.TimestampType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Iterator; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ElasticHeaderImpl.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ElasticHeaderImpl.java index ba525dcdd1..171c40f2c1 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ElasticHeaderImpl.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/ElasticHeaderImpl.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.kafka.helper; import org.apache.kafka.common.header.Header; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java index 83ee7fb7fc..5e1a62d386 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaInstrumentationHeadersHelper.java @@ -24,8 +24,8 @@ import co.elastic.apm.agent.impl.transaction.TraceContext; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.producer.ProducerRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Iterator; import java.util.List; diff --git a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaRecordHeaderAccessor.java b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaRecordHeaderAccessor.java index 0894304c59..3a7ab474d7 100644 --- a/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaRecordHeaderAccessor.java +++ b/apm-agent-plugins/apm-kafka-plugin/apm-kafka-headers-plugin/src/main/java/co/elastic/apm/agent/kafka/helper/KafkaRecordHeaderAccessor.java @@ -24,8 +24,8 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.header.Header; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.HashMap; diff --git a/apm-agent-plugins/apm-log-correlation-plugin/src/main/java/co/elastic/apm/agent/mdc/MdcActivationListener.java b/apm-agent-plugins/apm-log-correlation-plugin/src/main/java/co/elastic/apm/agent/mdc/MdcActivationListener.java index 4cae3403f8..769e94a800 100644 --- a/apm-agent-plugins/apm-log-correlation-plugin/src/main/java/co/elastic/apm/agent/mdc/MdcActivationListener.java +++ b/apm-agent-plugins/apm-log-correlation-plugin/src/main/java/co/elastic/apm/agent/mdc/MdcActivationListener.java @@ -25,8 +25,8 @@ import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.TraceContext; import co.elastic.apm.agent.logging.LoggingConfiguration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.lang.invoke.MethodHandle; diff --git a/apm-agent-plugins/apm-log-correlation-plugin/src/test/java/co/elastic/apm/agent/mdc/MdcActivationListenerIT.java b/apm-agent-plugins/apm-log-correlation-plugin/src/test/java/co/elastic/apm/agent/mdc/MdcActivationListenerIT.java index 2d3328e07c..056ec1d9d2 100644 --- a/apm-agent-plugins/apm-log-correlation-plugin/src/test/java/co/elastic/apm/agent/mdc/MdcActivationListenerIT.java +++ b/apm-agent-plugins/apm-log-correlation-plugin/src/test/java/co/elastic/apm/agent/mdc/MdcActivationListenerIT.java @@ -25,7 +25,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.stubbing.Answer; -import org.slf4j.Logger; import org.slf4j.MDC; import static org.assertj.core.api.Assertions.assertThat; @@ -51,7 +50,7 @@ void setUp() { @Test void testVerifyThatWithEnabledCorrelationAndLoggedErrorMdcErrorIdIsNotBlankWithSlf4j() { when(loggingConfiguration.isLogCorrelationEnabled()).thenReturn(true); - Logger mockedLogger = mock(Logger.class); + org.slf4j.Logger mockedLogger = mock(org.slf4j.Logger.class); doAnswer(invocation -> assertMdcErrorIdIsNotEmpty()).when(mockedLogger).error(anyString(), any(Exception.class)); assertMdcErrorIdIsEmpty(); @@ -70,7 +69,7 @@ void testVerifyThatWithEnabledCorrelationAndLoggedErrorMdcErrorIdIsNotBlankWithS @Test void testVerifyThatWithEnabledCorrelationAndLoggedErrorMdcErrorIdIsNotBlankWithSlf4jNotInTransaction() { when(loggingConfiguration.isLogCorrelationEnabled()).thenReturn(true); - Logger mockedLogger = mock(Logger.class); + org.slf4j.Logger mockedLogger = mock(org.slf4j.Logger.class); doAnswer(invocation -> assertMdcErrorIdIsNotEmpty()).when(mockedLogger).error(anyString(), any(Exception.class)); assertMdcErrorIdIsEmpty(); diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/main/java/co/elastic/apm/agent/log/shader/AbstractEcsReformattingHelper.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/main/java/co/elastic/apm/agent/log/shader/AbstractEcsReformattingHelper.java index ee0598be8e..6e07de5723 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/main/java/co/elastic/apm/agent/log/shader/AbstractEcsReformattingHelper.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/main/java/co/elastic/apm/agent/log/shader/AbstractEcsReformattingHelper.java @@ -32,8 +32,8 @@ import co.elastic.apm.agent.sdk.state.GlobalState; import co.elastic.apm.agent.sdk.weakconcurrent.WeakConcurrent; import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.List; @@ -106,8 +106,9 @@ public abstract class AbstractEcsReformattingHelper { // Escape shading private static final String ECS_LOGGING_PACKAGE_NAME = "co.elastic.logging"; - // We can use regular shaded logging here as this class is loaded from the agent CL + // We can use regular agent logging here as this class is loaded from the agent CL private static final Logger logger = LoggerFactory.getLogger(AbstractEcsReformattingHelper.class); + public static final String ECS_SHADE_APPENDER_NAME = "EcsShadeAppender"; // Used to cache the fact that ECS-formatter or ECS-appender are not created for a given appender @@ -463,16 +464,4 @@ protected long getMaxLogFileSize() { } protected abstract void closeShadeAppender(A shadeAppender); - - /********************************************************************************************************************* - * Since we shade slf4j in submodules, the following methods provide a way to properly log a message to the agent log - ********************************************************************************************************************/ - - protected void logInfo(String message) { - logger.info(message); - } - - protected void logError(String message, Throwable throwable) { - logger.error(message, throwable); - } } diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/test/java/co/elastic/apm/agent/log/shader/LogShadingInstrumentationTest.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/test/java/co/elastic/apm/agent/log/shader/LogShadingInstrumentationTest.java index b0c8650352..2c3ea39d18 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/test/java/co/elastic/apm/agent/log/shader/LogShadingInstrumentationTest.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log-shader-plugin-common/src/test/java/co/elastic/apm/agent/log/shader/LogShadingInstrumentationTest.java @@ -22,7 +22,7 @@ import co.elastic.apm.agent.configuration.CoreConfiguration; import co.elastic.apm.agent.logging.LogEcsReformatting; import co.elastic.apm.agent.logging.LoggingConfiguration; -import com.fasterxml.jackson.core.JsonProcessingException; +import co.elastic.apm.agent.logging.TestUtils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.AfterEach; @@ -210,7 +210,7 @@ public void testLogOverride() throws IOException { logger.warn(WARN_MESSAGE); logger.error(ERROR_MESSAGE); - ArrayList overriddenLogEvents = readEcsLogFile(getOriginalLogFilePath().toString()); + ArrayList overriddenLogEvents = TestUtils.readJsonFile(getOriginalLogFilePath().toString()); assertThat(overriddenLogEvents).hasSize(4); for (JsonNode ecsLogLineTree : overriddenLogEvents) { verifyEcsLogLine(ecsLogLineTree); @@ -292,22 +292,7 @@ private void verifyEcsLogLine(JsonNode ecsLogLineTree) { @Nonnull private ArrayList readShadeLogFile() throws IOException { - return readEcsLogFile(getShadeLogFilePath()); - } - - @Nonnull - private ArrayList readEcsLogFile(String shadeLogFilePath) throws IOException { - ArrayList ecsLogLines = new ArrayList<>(); - try (Stream stream = Files.lines(Paths.get(shadeLogFilePath))) { - stream.forEach(line -> { - try { - ecsLogLines.add(objectMapper.readTree(line)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - }); - } - return ecsLogLines; + return TestUtils.readJsonFile(getShadeLogFilePath()); } @Nonnull @@ -381,7 +366,7 @@ public void testShadeLogRolling() throws IOException { // log4j1 this happens AFTER the event is logged. This means we can only count on the non-active file to // contain a single line String shadeLogFilePath = getShadeLogFilePath(); - ArrayList jsonNodes = readEcsLogFile(shadeLogFilePath + ".1"); + ArrayList jsonNodes = TestUtils.readJsonFile(shadeLogFilePath + ".1"); assertThat(jsonNodes).hasSize(1); } diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/Log4J1EcsReformattingHelper.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/Log4J1EcsReformattingHelper.java index 03ef1037c4..64c8683aa2 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/Log4J1EcsReformattingHelper.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j1-plugin/src/main/java/co/elastic/apm/agent/log4j1/Log4J1EcsReformattingHelper.java @@ -21,6 +21,8 @@ import co.elastic.apm.agent.log.shader.AbstractEcsReformattingHelper; import co.elastic.apm.agent.log.shader.Utils; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.logging.log4j.EcsLayout; import org.apache.log4j.FileAppender; import org.apache.log4j.Layout; @@ -33,6 +35,8 @@ class Log4J1EcsReformattingHelper extends AbstractEcsReformattingHelper { + private static final Logger logger = LoggerFactory.getLogger(Log4J1EcsReformattingHelper.class); + Log4J1EcsReformattingHelper() {} @Nullable @@ -84,7 +88,7 @@ protected WriterAppender createAndStartEcsAppender(WriterAppender originalAppend shadeAppender.setName(ecsAppenderName); shadeAppender.setLayout(ecsLayout); } catch (IOException e) { - logError("Failed to create Log shading FileAppender. Auto ECS reformatting will not work.", e); + logger.error("Failed to create Log shading FileAppender. Auto ECS reformatting will not work.", e); } } return shadeAppender; diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4J2EcsReformattingHelper.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4J2EcsReformattingHelper.java index 108d4ca8d0..322dddff22 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4J2EcsReformattingHelper.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4J2EcsReformattingHelper.java @@ -20,6 +20,8 @@ import co.elastic.apm.agent.log.shader.AbstractEcsReformattingHelper; import co.elastic.apm.agent.log.shader.Utils; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.logging.log4j2.EcsLayout; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Layout; @@ -44,6 +46,8 @@ class Log4J2EcsReformattingHelper extends AbstractEcsReformattingHelper> { + private static final Logger logger = LoggerFactory.getLogger(Log4J2EcsReformattingHelper.class); + Log4J2EcsReformattingHelper() {} @Nullable @@ -103,7 +107,7 @@ protected Appender createAndStartEcsAppender(Appender originalAppender, String e Method getFileNameMethod = originalAppender.getClass().getDeclaredMethod("getFileName"); logFile = (String) getFileNameMethod.invoke(originalAppender); } catch (Exception e) { - logError("Failed to obtain log file name from file appender", e); + logger.error("Failed to obtain log file name from file appender", e); } } diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4j2EcsReformattingInstrumentation.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4j2EcsReformattingInstrumentation.java index 9672b83ca5..197a047e65 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4j2EcsReformattingInstrumentation.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/Log4j2EcsReformattingInstrumentation.java @@ -31,10 +31,8 @@ import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.isBootstrapClassLoader; import static net.bytebuddy.matcher.ElementMatchers.nameContains; -import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; -import static net.bytebuddy.matcher.ElementMatchers.ofType; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/test/java/co/elastic/apm/agent/log4j2/LegacyLog4j2ShadingTestRunner.java b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/test/java/co/elastic/apm/agent/log4j2/LegacyLog4j2ShadingTestRunner.java index 7954879083..a13b6777f6 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/test/java/co/elastic/apm/agent/log4j2/LegacyLog4j2ShadingTestRunner.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-log4j2-plugin/src/test/java/co/elastic/apm/agent/log4j2/LegacyLog4j2ShadingTestRunner.java @@ -30,10 +30,10 @@ public LegacyLog4j2ShadingTestRunner() throws Exception { List dependencies = List.of( "org.apache.logging.log4j:log4j-core:2.6", "org.apache.logging.log4j:log4j-api:2.6", - "co.elastic.logging:log4j2-ecs-layout:1.1.0" + "co.elastic.logging:log4j2-ecs-layout:1.3.2" ); runner = new TestClassWithDependencyRunner(dependencies, LegacyLog4j2ShadingTest.class, Log4j2ShadingTest.class, - Log4J2EcsReformattingHelper.class, Log4j2ShadingTest.Log4j2LoggerFacade.class); + Log4j2ShadingTest.Log4j2LoggerFacade.class); } @Test diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/LogbackEcsReformattingHelper.java b/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/LogbackEcsReformattingHelper.java index a2e99b0936..92b25e1f55 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/LogbackEcsReformattingHelper.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/LogbackEcsReformattingHelper.java @@ -30,6 +30,8 @@ import co.elastic.apm.agent.log.shader.AbstractEcsReformattingHelper; import co.elastic.apm.agent.log.shader.Utils; import co.elastic.apm.agent.matcher.WildcardMatcher; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import co.elastic.logging.AdditionalField; import co.elastic.logging.logback.EcsEncoder; @@ -39,6 +41,8 @@ class LogbackEcsReformattingHelper extends AbstractEcsReformattingHelper, Encoder> { + private static final Logger logger = LoggerFactory.getLogger(LogbackEcsReformattingHelper.class); + private static final LoggerContext defaultLoggerContext = new LoggerContext(); LogbackEcsReformattingHelper() {} @@ -117,8 +121,7 @@ protected OutputStreamAppender createAndStartEcsAppender(OutputSt try { VersionUtils.setMaxFileSize(triggeringPolicy, getMaxLogFileSize()); } catch (Throwable throwable) { - // We cannot log here because this plugin escapes slf4j package reallocation. - logInfo("Failed to set max file size for log shader file-rolling strategy. Using the default " + + logger.info("Failed to set max file size for log shader file-rolling strategy. Using the default " + "Logback setting instead - " + SizeBasedTriggeringPolicy.DEFAULT_MAX_FILE_SIZE + ". Error message: " + throwable.getMessage()); } @@ -128,10 +131,9 @@ protected OutputStreamAppender createAndStartEcsAppender(OutputSt ecsAppender.setContext(defaultLoggerContext); try { - VersionUtils.copyImmediateFlushSetting(originalAppender); + VersionUtils.copyImmediateFlushSetting(originalAppender, ecsAppender); } catch (Throwable throwable) { - // We cannot log here because this plugin escapes slf4j package reallocation. - // Writing to System out may be too much for this. + logger.info("Failed to set immediate-flush for the custom ECS appender"); } ecsAppender.setAppend(true); ecsAppender.setName(ecsAppenderName); diff --git a/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/VersionUtils.java b/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/VersionUtils.java index f59dd267b3..78d1bfdda0 100644 --- a/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/VersionUtils.java +++ b/apm-agent-plugins/apm-log-shader-plugin/apm-logback-plugin/apm-logback-plugin-impl/src/main/java/co/elastic/apm/agent/logback/VersionUtils.java @@ -93,13 +93,14 @@ static void setMaxFileSize(SizeBasedTriggeringPolicy policy, long maxFileSize * In older versions, this feature was controlled through the encoders. Since we are using * {@link co.elastic.logging.logback.EcsEncoder}, the shaded logs will always be written as if {@code immediateFlush} * is set to {@code true} in versions <1.2.0 - * @param appender the appender to configure + * @param originalAppender the original appender + * @param ecsAppender the custom ECS appender */ - static void copyImmediateFlushSetting(OutputStreamAppender appender) throws Throwable { + static void copyImmediateFlushSetting(OutputStreamAppender originalAppender, OutputStreamAppender ecsAppender) throws Throwable { if (setImmediateFlushMethod != null && isImmediateFlushMethod != null) { - boolean immediateFlushSet = (boolean) isImmediateFlushMethod.invoke(appender); - setImmediateFlushMethod.invoke(appender, immediateFlushSet); + boolean immediateFlushSet = (boolean) isImmediateFlushMethod.invoke(originalAppender); + setImmediateFlushMethod.invoke(ecsAppender, immediateFlushSet); } } } diff --git a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/ApmServerLogShipper.java b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/ApmServerLogShipper.java index 5caccb45b4..d4acd27a0c 100644 --- a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/ApmServerLogShipper.java +++ b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/ApmServerLogShipper.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.report.ReporterConfiguration; import co.elastic.apm.agent.report.serialize.PayloadSerializer; import com.dslplatform.json.JsonWriter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/FileTailer.java b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/FileTailer.java index 340e05fddb..9b08767bac 100644 --- a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/FileTailer.java +++ b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/FileTailer.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.log.shipper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.io.File; import java.io.IOException; diff --git a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/LogShipperFactory.java b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/LogShipperFactory.java index a89114a7fa..e69e20ce1e 100644 --- a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/LogShipperFactory.java +++ b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/LogShipperFactory.java @@ -29,8 +29,8 @@ import co.elastic.apm.agent.report.serialize.DslJsonSerializer; import co.elastic.apm.agent.util.ExecutorUtils; import co.elastic.apm.agent.common.ThreadUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.io.File; import java.io.IOException; diff --git a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/TailableFile.java b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/TailableFile.java index 59503bad7a..2a21c1eb82 100644 --- a/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/TailableFile.java +++ b/apm-agent-plugins/apm-log-shipper-plugin/src/main/java/co/elastic/apm/agent/log/shipper/TailableFile.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.log.shipper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.Closeable; diff --git a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java index 14fd3adebb..67ddc46d0d 100644 --- a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java +++ b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMeterRegistrySerializer.java @@ -34,8 +34,8 @@ import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Timer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; diff --git a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporter.java b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporter.java index 2c89b3a50f..2bdb061597 100644 --- a/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporter.java +++ b/apm-agent-plugins/apm-micrometer-plugin/src/main/java/co/elastic/apm/agent/micrometer/MicrometerMetricsReporter.java @@ -30,8 +30,8 @@ import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.io.Closeable; import java.util.HashMap; diff --git a/apm-agent-plugins/apm-mongoclient-plugin/src/main/java/co/elastic/apm/agent/mongoclient/ConnectionAdvice.java b/apm-agent-plugins/apm-mongoclient-plugin/src/main/java/co/elastic/apm/agent/mongoclient/ConnectionAdvice.java index 3840658ce8..274ecf064c 100644 --- a/apm-agent-plugins/apm-mongoclient-plugin/src/main/java/co/elastic/apm/agent/mongoclient/ConnectionAdvice.java +++ b/apm-agent-plugins/apm-mongoclient-plugin/src/main/java/co/elastic/apm/agent/mongoclient/ConnectionAdvice.java @@ -27,8 +27,8 @@ import net.bytebuddy.asm.Advice; import org.bson.BsonDocument; import org.bson.BsonValue; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java index dac3e1611b..1c4966c42f 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientAsyncInstrumentation.java @@ -34,8 +34,8 @@ import okhttp3.HttpUrl; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java index ac40ecbdf1..edc210c2f8 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttpClientAsyncInstrumentation.java @@ -33,8 +33,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java index 208b4c0034..e493a65301 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanBuilderInstrumentation.java @@ -30,8 +30,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Map; diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java index a35ad8d970..c6c79fed14 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/ApmSpanInstrumentation.java @@ -27,8 +27,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Map; diff --git a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/SpanContextInstrumentation.java b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/SpanContextInstrumentation.java index 37b40afc5a..753b7de841 100644 --- a/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/SpanContextInstrumentation.java +++ b/apm-agent-plugins/apm-opentracing-plugin/src/main/java/co/elastic/apm/agent/opentracingimpl/SpanContextInstrumentation.java @@ -24,8 +24,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.implementation.bytecode.assign.Assigner; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.HashMap; diff --git a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java index fc85955b1f..6decb709a9 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/CallTree.java @@ -26,8 +26,8 @@ import co.elastic.apm.agent.objectpool.ObjectPool; import co.elastic.apm.agent.objectpool.Recyclable; import co.elastic.apm.agent.profiler.collections.LongHashSet; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.IOException; diff --git a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java index a817dfbf15..d288220b13 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/SamplingProfiler.java @@ -40,8 +40,8 @@ import com.lmax.disruptor.Sequence; import com.lmax.disruptor.SequenceBarrier; import com.lmax.disruptor.WaitStrategy; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/asyncprofiler/JfrParser.java b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/asyncprofiler/JfrParser.java index 622386ad67..868f620b7b 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/asyncprofiler/JfrParser.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/main/java/co/elastic/apm/agent/profiler/asyncprofiler/JfrParser.java @@ -25,8 +25,8 @@ import co.elastic.apm.agent.profiler.collections.Int2ObjectHashMap; import co.elastic.apm.agent.profiler.collections.Long2LongHashMap; import co.elastic.apm.agent.profiler.collections.Long2ObjectHashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.io.File; diff --git a/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerReplay.java b/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerReplay.java index 48c63ebdbe..e213f316cc 100644 --- a/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerReplay.java +++ b/apm-agent-plugins/apm-profiling-plugin/src/test/java/co/elastic/apm/agent/profiler/SamplingProfilerReplay.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.MockReporter; import co.elastic.apm.agent.MockTracer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.io.File; import java.nio.file.Files; diff --git a/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java b/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java index 2cec263e3b..b9f4a6011b 100644 --- a/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-quartz-job-plugin/quartz-common/src/main/java/co/elastic/apm/agent/quartzjob/AbstractJobTransactionNameInstrumentation.java @@ -31,8 +31,8 @@ import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; import org.quartz.JobExecutionContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Collection; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/test/java/co/elastic/apm/agent/rabbitmq/RabbitMQIT.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/test/java/co/elastic/apm/agent/rabbitmq/RabbitMQIT.java index 2c55a13e20..86588e5d5e 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/test/java/co/elastic/apm/agent/rabbitmq/RabbitMQIT.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-plugin/src/test/java/co/elastic/apm/agent/rabbitmq/RabbitMQIT.java @@ -64,10 +64,9 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.testcontainers.containers.RabbitMQContainer; -import org.testcontainers.containers.output.Slf4jLogConsumer; import javax.annotation.Nullable; import java.io.IOException; @@ -107,7 +106,7 @@ public class RabbitMQIT extends AbstractInstrumentationTest { @BeforeAll static void before() { - container.withLogConsumer(new Slf4jLogConsumer(logger)) + container.withLogConsumer(TestContainersUtils.createSlf4jLogConsumer(RabbitMQIT.class)) .withStartupTimeout(Duration.ofSeconds(120)) .withCreateContainerCmdModifier(TestContainersUtils.withMemoryLimit(2048)) .start(); diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java index 3bd18d49f7..80054e29f7 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchHelper.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.rabbitmq; import co.elastic.apm.agent.impl.ElasticApmTracer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.core.Message; import java.util.List; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java index ceedc5843a..2024261f07 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/main/java/co/elastic/apm/agent/rabbitmq/MessageBatchIteratorWrapper.java @@ -21,8 +21,8 @@ import co.elastic.apm.agent.impl.ElasticApmTracer; import co.elastic.apm.agent.impl.transaction.Transaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/AbstractAsyncRabbitMqTest.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/AbstractAsyncRabbitMqTest.java index cdebe8a3a5..66e68627b0 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/AbstractAsyncRabbitMqTest.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/AbstractAsyncRabbitMqTest.java @@ -19,8 +19,8 @@ package co.elastic.apm.agent.rabbitmq; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.rabbit.AsyncRabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BatchConfiguration.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BatchConfiguration.java index d1d268b1c7..8d8db7c3a4 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BatchConfiguration.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BatchConfiguration.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.rabbitmq.TestConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.annotation.EnableRabbit; diff --git a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/MessageListenerConfiguration.java b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/MessageListenerConfiguration.java index f5b3df602d..dfa34b2d11 100644 --- a/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/MessageListenerConfiguration.java +++ b/apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/MessageListenerConfiguration.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.rabbitmq.config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.context.annotation.Bean; diff --git a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java index 85d8af1a30..0b74598ef0 100644 --- a/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java +++ b/apm-agent-plugins/apm-reactor-plugin/src/main/java/co/elastic/apm/agent/reactor/TracedSubscriber.java @@ -26,8 +26,8 @@ import org.reactivestreams.Publisher; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import reactor.core.CoreSubscriber; import reactor.core.Fuseable; import reactor.core.publisher.Hooks; diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java index b01a9f9c80..ddd989a354 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce34StopSpanInstrumentation.java @@ -25,8 +25,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Arrays; import java.util.Collection; diff --git a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java index b7cc382657..e2a49eb10c 100644 --- a/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java +++ b/apm-agent-plugins/apm-redis-plugin/apm-lettuce-plugin/src/main/java/co/elastic/apm/agent/lettuce/Lettuce5StopSpanInstrumentation.java @@ -26,8 +26,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import java.util.Arrays; import java.util.Collection; diff --git a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java index ffca0e133f..46ac42aa66 100644 --- a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java +++ b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/ScheduledTransactionNameInstrumentation.java @@ -31,8 +31,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java index 65c0254666..cbd78daa93 100644 --- a/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java +++ b/apm-agent-plugins/apm-scheduled-annotation-plugin/src/main/java/co/elastic/apm/agent/scheduled/TimerTaskInstrumentation.java @@ -30,8 +30,8 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatchers; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java index 7437b705c3..f32fa2ccc5 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletTransactionHelper.java @@ -29,8 +29,8 @@ import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.util.TransactionNameUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java index 4dc981ccd4..3253aefee5 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/ServletVersionInstrumentation.java @@ -23,8 +23,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/ServletTransactionCreationHelper.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/ServletTransactionCreationHelper.java index f45a5ea85a..4b472b65be 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/ServletTransactionCreationHelper.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/ServletTransactionCreationHelper.java @@ -23,8 +23,8 @@ import co.elastic.apm.agent.impl.context.web.WebConfiguration; import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; diff --git a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java index d237a99cf0..8b732ea584 100644 --- a/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java +++ b/apm-agent-plugins/apm-spring-resttemplate/apm-spring-resttemplate-plugin/src/main/java/co/elastic/apm/agent/resttemplate/SpringRestTemplateAdvice.java @@ -24,8 +24,8 @@ import co.elastic.apm.agent.impl.transaction.Outcome; import co.elastic.apm.agent.impl.transaction.Span; import net.bytebuddy.asm.Advice; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpResponse; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java index efb362785a..826947df9d 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/TransactionAwareSubscriber.java @@ -24,8 +24,8 @@ import co.elastic.apm.agent.sdk.weakconcurrent.WeakMap; import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.web.server.ServerWebExchange; import reactor.core.CoreSubscriber; import reactor.util.context.Context; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java index ad6b000a1d..226d3c6d18 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxHelper.java @@ -31,8 +31,8 @@ import co.elastic.apm.agent.util.PotentiallyMultiValuedMap; import co.elastic.apm.agent.util.TransactionNameUtils; import org.reactivestreams.Publisher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.http.HttpCookie; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java index 4df4205d06..e114262d70 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-plugin/src/main/java/co/elastic/apm/agent/springwebflux/WebfluxServletHelper.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.cache.WeakKeySoftValueLoadingCache; import co.elastic.apm.agent.impl.transaction.Transaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.http.server.reactive.AbstractServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.server.ServerWebExchange; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java index 2610ce3398..6c37dc8aa3 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/GreetingAnnotated.java @@ -22,8 +22,8 @@ import co.elastic.apm.agent.impl.GlobalTracer; import co.elastic.apm.agent.impl.transaction.AbstractSpan; import co.elastic.apm.agent.impl.transaction.Transaction; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/WebFluxApplication.java b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/WebFluxApplication.java index df713618d4..457b043346 100644 --- a/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/WebFluxApplication.java +++ b/apm-agent-plugins/apm-spring-webflux/apm-spring-webflux-testapp/src/main/java/co/elastic/apm/agent/springwebflux/testapp/WebFluxApplication.java @@ -18,8 +18,8 @@ */ package co.elastic.apm.agent.springwebflux.testapp; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java index 4da01ba2af..1a5d83de73 100644 --- a/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java +++ b/apm-agent-plugins/apm-spring-webmvc-plugin/src/main/java/co/elastic/apm/agent/springwebmvc/SpringServiceNameInstrumentation.java @@ -24,8 +24,8 @@ import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.springframework.web.context.WebApplicationContext; import javax.servlet.ServletContext; diff --git a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/UrlConnectionPropertyAccessor.java b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/UrlConnectionPropertyAccessor.java index 5bb48dfc73..16ce3bbd74 100644 --- a/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/UrlConnectionPropertyAccessor.java +++ b/apm-agent-plugins/apm-urlconnection-plugin/src/main/java/co/elastic/apm/agent/urlconnection/UrlConnectionPropertyAccessor.java @@ -20,8 +20,8 @@ import co.elastic.apm.agent.impl.transaction.TextHeaderGetter; import co.elastic.apm.agent.impl.transaction.TextHeaderSetter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.net.HttpURLConnection; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java index ea75657e2b..e67d771710 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractHttpTransactionHelper.java @@ -27,8 +27,8 @@ import co.elastic.apm.agent.impl.transaction.Transaction; import co.elastic.apm.agent.matcher.WildcardMatcher; import co.elastic.apm.agent.util.TransactionNameUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Arrays; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java index 957821b0d0..ffaefad272 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/main/java/co/elastic/apm/agent/vertx/AbstractVertxWebHelper.java @@ -33,8 +33,8 @@ import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; import io.vertx.ext.web.RoutingContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.nio.CharBuffer; diff --git a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/VertxTestHttpServer.java b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/VertxTestHttpServer.java index 246ddd3150..510ed53ff9 100644 --- a/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/VertxTestHttpServer.java +++ b/apm-agent-plugins/apm-vertx/apm-vertx-common/src/test/java/co/elastic/apm/agent/vertx/helper/VertxTestHttpServer.java @@ -25,8 +25,8 @@ import io.vertx.core.net.PemKeyCertOptions; import io.vertx.ext.web.Router; import io.vertx.junit5.VertxTestContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import javax.annotation.Nullable; import java.util.Objects; diff --git a/apm-agent/pom.xml b/apm-agent/pom.xml index d043e64fcd..6c35eb77f6 100644 --- a/apm-agent/pom.xml +++ b/apm-agent/pom.xml @@ -24,11 +24,6 @@ - - org.slf4j - jul-to-slf4j - ${version.slf4j} - ${project.groupId} apm-agent-core diff --git a/integration-tests/application-server-integration-tests/src/test/java/co/elastic/apm/servlet/AbstractServletContainerIntegrationTest.java b/integration-tests/application-server-integration-tests/src/test/java/co/elastic/apm/servlet/AbstractServletContainerIntegrationTest.java index 5239766e75..c197e13192 100644 --- a/integration-tests/application-server-integration-tests/src/test/java/co/elastic/apm/servlet/AbstractServletContainerIntegrationTest.java +++ b/integration-tests/application-server-integration-tests/src/test/java/co/elastic/apm/servlet/AbstractServletContainerIntegrationTest.java @@ -35,8 +35,8 @@ import org.mockserver.model.ClearType; import org.mockserver.model.HttpRequest; import org.mockserver.model.HttpResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import co.elastic.apm.agent.sdk.logging.Logger; +import co.elastic.apm.agent.sdk.logging.LoggerFactory; import org.testcontainers.containers.Container; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; @@ -102,7 +102,7 @@ public abstract class AbstractServletContainerIntegrationTest { private static final String AGENT_VERSION_TO_DOWNLOAD_FROM_MAVEN = null; private static MockServerContainer mockServerContainer = new MockServerContainer() - //.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger(MockServerContainer.class))) + .withLogConsumer(TestContainersUtils.createSlf4jLogConsumer(MockServerContainer.class)) .withNetworkAliases("apm-server") .withNetwork(Network.SHARED); private static OkHttpClient httpClient;