package org.mongodb.morphia.logging;

import org.mongodb.morphia.logging.jdk.JDKLoggerFactory;

import java.util.ArrayList;
import java.util.List;

Morphia's logging factory that can return either an slf4j LoggerFactory or a JDK LoggerFactory.
/** * Morphia's logging factory that can return either an slf4j LoggerFactory or a JDK LoggerFactory. */
public final class MorphiaLoggerFactory { private static final List<String> FACTORIES = new ArrayList<String>(); private static LoggerFactory loggerFactory; static { FACTORIES.add("org.mongodb.morphia.logging.slf4j.SLF4JLoggerImplFactory"); FACTORIES.add(JDKLoggerFactory.class.getName()); } private MorphiaLoggerFactory() { }
Gets or creates a Logger for the given class.
Params:
  • c – the class to use for naming
Returns:the Logger
/** * Gets or creates a Logger for the given class. * * @param c the class to use for naming * @return the Logger */
public static Logger get(final Class<?> c) { init(); return loggerFactory.get(c); } private static synchronized void init() { if (loggerFactory == null) { chooseLoggerFactory(); } } private static void chooseLoggerFactory() { for (final String f : FACTORIES) { loggerFactory = newInstance(f); if (loggerFactory != null) { loggerFactory.get(MorphiaLoggerFactory.class).info("LoggerImplFactory set to " + loggerFactory.getClass().getName()); return; } } throw new IllegalStateException("Cannot instantiate any MorphiaLoggerFactory"); } private static LoggerFactory newInstance(final String f) { try { return (LoggerFactory) Class.forName(f).newInstance(); } catch (Throwable ignore) { return null; } }
Register a LoggerFactory; last one registered is used.
Params:
  • factoryClass – the factory class
/** * Register a LoggerFactory; last one registered is used. * * @param factoryClass the factory class */
public static void registerLogger(final Class<? extends LoggerFactory> factoryClass) { if (loggerFactory == null) { FACTORIES.add(0, factoryClass.getName()); } else { throw new IllegalStateException("LoggerImplFactory must be registered before logging is initialized."); } }
Clears the logger factory
/** * Clears the logger factory */
public static void reset() { loggerFactory = null; } }