package rocks.inspectit.shared.all.minlog; import org.slf4j.LoggerFactory; import com.esotericsoftware.minlog.Log; import com.esotericsoftware.minlog.Log.Logger; /** * A bridge to log the minlog message to the slf4j. * * @author Ivan Senic * */ public class MinlogToSLF4JLogger extends Logger { /** * Log everything under <i>com.esotericsoftware.minlog</i>. We have no better solution. */ private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MinlogToSLF4JLogger.class); /** * Initializes the bridge. Must be called for correct setup. */ public static void init() { // set to info max, this means that we will never be able to log trace & debug message from // Minlog; let slf4j decide if we are printing from INFO on Log.set(Log.LEVEL_INFO); Log.setLogger(new MinlogToSLF4JLogger()); } /** * {@inheritDoc} * <p> * Forward to the slf4j. */ @Override public void log(int level, String category, String message, Throwable ex) { // we implement log for all levels, although we know that INFO is maximum we can get switch (level) { case Log.LEVEL_TRACE: if (LOGGER.isTraceEnabled()) { LOGGER.trace(getMessage(category, message), ex); } break; case Log.LEVEL_DEBUG: if (LOGGER.isDebugEnabled()) { LOGGER.debug(getMessage(category, message), ex); } break; case Log.LEVEL_INFO: if (LOGGER.isInfoEnabled()) { LOGGER.info(getMessage(category, message), ex); } break; case Log.LEVEL_WARN: if (LOGGER.isWarnEnabled()) { LOGGER.warn(getMessage(category, message), ex); } break; case Log.LEVEL_ERROR: if (LOGGER.isErrorEnabled()) { LOGGER.error(getMessage(category, message), ex); } break; default: break; } } /** * Constructs message for the given category/message. * * @param category * Category description. * @param message * Message * @return combinedMessage */ private String getMessage(String category, String message) { int size = (category != null) ? category.length() + 2 : (message != null) ? message.length() : 0; StringBuilder stringBuilder = new StringBuilder(size); if (null != category) { stringBuilder.append(category); stringBuilder.append(": "); } stringBuilder.append(message); return stringBuilder.toString(); } }