package rocks.inspectit.agent.java.sdk.opentracing.internal.impl;
import rocks.inspectit.agent.java.sdk.opentracing.internal.TracerLogger;
import rocks.inspectit.agent.java.sdk.opentracing.internal.TracerLoggerProvider;
import rocks.inspectit.agent.java.sdk.opentracing.internal.noop.NoopLogger;
/**
* Wraps the {@link TracerLoggerProvider} that will be used to provide {@link TracerLogger}.
* <p>
* In order to not introduce any logging dependencies to the SDK project, this class represents a
* way to bridge the logging framework used in inspectIT to the SDK.
*
* @author Ivan Senic
*
*/
public final class TracerLoggerWrapper {
/**
* By default we use provider that returns the {@link NoopLogger}. If inspectIT agent is used
* then the provider will be overwritten with the one providing real logger instances.
*/
private static TracerLoggerProvider provider = new TracerLoggerProvider() {
@Override
public TracerLogger getTraceLogger(Class<?> clazz) {
return NoopLogger.INSTANCE;
}
};
/**
* Private constructor, only static methods.
*/
private TracerLoggerWrapper() {
}
/**
* Returns proper {@link TracerLogger} for the given class. If inspectIT agent is not used, then
* returned logger will be {@link NoopLogger}. Otherwise, inspectIT will do the bridging to the
* logging framework used in inspectIT (currently slf4j).
*
* @param clazz
* Class to get logger for.
* @return {@link TracerLogger}
*/
public static TracerLogger getTraceLogger(Class<?> clazz) {
return provider.getTraceLogger(clazz);
}
/**
* Sets {@link #provider}. Should be called only by inspectIT SDK classes.
*
* @param provider
* New value for {@link #provider}
*/
public static void setProvider(TracerLoggerProvider provider) {
if (null != provider) {
TracerLoggerWrapper.provider = provider;
}
}
}