/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.component; import org.slf4j.Logger; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.util.ArgumentChecker; /** * A simple logger for component startup. * <p> * The component system is a bootstrapping system and so has its own logger. */ public interface ComponentLogger { /** * Logs a verbose info message. * * @param message the string message, not null */ void logDebug(final String message); /** * Logs a normal info message. * * @param message the string message, not null */ void logInfo(final String message); /** * Logs a warning message. * * @param message the string message, not null */ void logWarn(final String message); /** * Logs an error. * * @param message the string message, not null */ void logError(final String message); /** * Logs an error. * * @param throwable the exception, not null */ void logError(final Throwable throwable); //------------------------------------------------------------------------- /** * Logger that outputs no logging. */ public static final class Sink implements ComponentLogger { /** * Singleton instance of a sink logger. */ public static final ComponentLogger INSTANCE = new Sink(); private Sink() { } @Override public void logDebug(String message) { // do nothing } @Override public void logInfo(String message) { // do nothing } @Override public void logWarn(String message) { // do nothing } @Override public void logError(String message) { // do nothing } @Override public void logError(Throwable throwable) { // do nothing } } //------------------------------------------------------------------------- /** * Logger that throws an exception for errors. */ public static final class Throws implements ComponentLogger { /** * Singleton instance of a sink logger. */ public static final ComponentLogger INSTANCE = new Throws(); private Throws() { } @Override public void logDebug(String message) { // do nothing } @Override public void logInfo(String message) { // do nothing } @Override public void logWarn(String message) { // do nothing } @Override public void logError(String message) { throw new OpenGammaRuntimeException(message); } @Override public void logError(Throwable throwable) { throw new OpenGammaRuntimeException(throwable.getMessage(), throwable); } } //------------------------------------------------------------------------- /** * Logger that outputs to the console. */ public static final class Console implements ComponentLogger { /** * Singleton instance of a verbose logger. */ public static final ComponentLogger VERBOSE = new Console(3); /** * The verbosity. */ private final int _verbosity; /** * Creates an instance. * <p> * Level 0 is errors only.<br /> * Level 1 is errors and warnings only.<br /> * Level 2 is normal info and above.<br /> * Level 3 is verbose info and above.<br /> * * @param verbosity the verbosity level, 0 to 3 */ public Console(int verbosity) { _verbosity = verbosity; } @Override public void logDebug(String message) { if (_verbosity >= 3) { System.out.println(message); } } @Override public void logInfo(String message) { if (_verbosity >= 2) { System.out.println(message); } } @Override public void logWarn(String message) { if (_verbosity >= 1) { System.out.println(message); } } @Override public void logError(String message) { System.err.println(message); } @Override public void logError(Throwable throwable) { throwable.printStackTrace(System.err); } } //------------------------------------------------------------------------- /** * Logger that outputs to a real logger. */ public static class Slf4JLogger implements ComponentLogger { private final Logger _logger; /** * Creates an instance. * * @param logger the logger, not null */ public Slf4JLogger(Logger logger) { ArgumentChecker.notNull(logger, "logger"); _logger = logger; } @Override public void logDebug(String message) { _logger.debug(message); } @Override public void logInfo(String message) { _logger.info(message); } @Override public void logWarn(String message) { _logger.warn(message); } @Override public void logError(String message) { _logger.error(message); } @Override public void logError(Throwable throwable) { _logger.error(throwable.getMessage(), throwable); } } }