All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tarantool.logging.LoggerFactory Maven / Gradle / Ivy

package org.tarantool.logging;

import java.util.Iterator;
import java.util.ServiceLoader;

/**
 * Basic service to load appropriate {@link LoggerProvider}
 * and obtain new loggers using loaded provider.
 * 

* This class should be used as a start point to obtain the logger: *

 {@code
 * static final Logger LOGGER = LoggerFactory.getLogger(MyClass.java);
 * } 
* and then it can be used as a standard logger: *
 {@code
 * LOGGER.info("Service initialized");
 * } 
*

* There are four major attempts to load the logger provider: *

    *
  1. * Use a runtime system property {@literal org.tarantool.logging.provider}. * Possible values are 'slf4j' or 'jdk'. (for instance, * {@literal -Dorg.tarantool.logging.provider=slf4j}). *
  2. *
  3. * Use SPI mechanism to find the proper {@link LoggerProvider}. *
  4. *
  5. * Check the classpath in attempt to discover one of supported logger * backends. *
  6. *
  7. * Use JUL implementation if none of above attempts are successful. *
  8. *
*

* This class is not a part of public API. */ public class LoggerFactory { private static final String LOGGING_PROVIDER_KEY = "org.tarantool.logging.provider"; private static final String LOGGING_PROVIDER_JDK = "jdk"; private static final String LOGGING_PROVIDER_SLF4J = "slf4j"; private static LoggerProvider loggerProvider = loadLoggerProvider(); private static LoggerProvider loadLoggerProvider() { // use a runtime property to determine a logger provider name try { String providerName = System.getProperty(LOGGING_PROVIDER_KEY); if (providerName != null) { if (providerName.equalsIgnoreCase(LOGGING_PROVIDER_JDK)) { return tryLoadJdkProvider(); } else if (providerName.equalsIgnoreCase(LOGGING_PROVIDER_SLF4J)) { return tryLoadSlf4jProvider(); } } } catch (Throwable ignored) { // no-op } // use SPI to pick a proper logger provider try { ServiceLoader serviceLoader = ServiceLoader.load(LoggerProvider.class); Iterator iterator = serviceLoader.iterator(); while (loggerProvider == null && iterator.hasNext()) { try { return iterator.next(); } catch (Throwable ignored) { // no-op } } } catch (Throwable ignored) { // no-op } // check slf4j-logback existence in the class path try { Class.forName("ch.qos.logback.classic.Logger", false, LoggerFactory.class.getClassLoader()); return tryLoadSlf4jProvider(); } catch (Throwable ignored) { // no-op } // use JUL logger as a default logger return tryLoadJdkProvider(); } private static LoggerProvider tryLoadJdkProvider() { return new JdkLoggerProvider(); } private static LoggerProvider tryLoadSlf4jProvider() { return new Slf4jLoggerProvider(); } private LoggerFactory() { } /** * Gets a logger provided by this factory. * * @param name logger name * * @return obtained logger */ public static Logger getLogger(String name) { return loggerProvider.getLogger(name); } /** * Gets a logger provided by this factory. * * @param type target class * * @return obtained logger */ public static Logger getLogger(Class type) { return loggerProvider.getLogger(type.getName()); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy