/* * Copyright (c) 2014 Globo.com - ATeam * All rights reserved. * * This source is subject to the Apache License, Version 2.0. * Please see the LICENSE file for more information. * * Authors: See AUTHORS file * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.globo.galeb.logger; import static org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace; import org.vertx.java.core.logging.Logger; /** * Class SafeLogger. * * @author See AUTHORS file. * @version 1.0.0, Nov 18, 2014. */ public class SafeLogger { /** * Enum LogLevel. * * @author See AUTHORS file. * @version 1.0.0, Nov 18, 2014. */ public enum LogLevel { /** The fatal level. */ FATAL, /** The error level. */ ERROR, /** The warn level. */ WARN, /** The info level. */ INFO, /** The debug level. */ DEBUG, /** The trace level. */ TRACE, /** The undef level. */ UNDEF } /** The logger. */ private static Logger log = null; /** The default log level. */ private LogLevel level = LogLevel.UNDEF; /** * Sets the logger. * * @param log the log * @return the safe logger */ public SafeLogger setLogger(final Object alog) { if (alog instanceof Logger && log == null) { log=(Logger)alog; } return this; } /** * Gets the logger. * * @return the logger */ public Logger getLogger() { return log; } /** * Log println. * * @param logLevel the log level * @param message the message * @param t throwable event */ private void logPrintln(LogLevel logLevel, final Object message, final Throwable t) { if (logLevel==null) logLevel = LogLevel.UNDEF; System.err.println(String.format("[%s] %s", logLevel.toString(), message)); if (t!=null) { System.err.println(String.format("[%s] %s", logLevel.toString(), getStackTrace(t))); } } /** * Fatal log. * * @param message the message */ public void fatal(final Object message) { level = LogLevel.FATAL; if (log==null) { logPrintln(level, message, null); return; } log.fatal(message); } /** * Fatal log. * * @param message the message * @param t throwable event */ public void fatal(final Object message, final Throwable t) { level = LogLevel.FATAL; if (log==null) { logPrintln(level, message, t); return; } log.fatal(message, t); } /** * Error log. * * @param message the message */ public void error(final Object message) { level = LogLevel.ERROR; if (log==null) { logPrintln(level, message, null); return; } log.error(message); } /** * Error log. * * @param message the message * @param t throwable event */ public void error(final Object message, final Throwable t) { level = LogLevel.ERROR; if (log==null) { logPrintln(level, message, t); return; } log.error(message, t); } /** * Warn log. * * @param message the message */ public void warn(final Object message) { level = LogLevel.WARN; if (log==null) { logPrintln(level, message, null); return; } log.warn(message); } /** * Warn log. * * @param message the message * @param t throwable event */ public void warn(final Object message, final Throwable t) { level = LogLevel.WARN; if (log==null) { logPrintln(level, message, t); return; } log.warn(message, t); } /** * Info log. * * @param message the message */ public void info(final Object message) { level = LogLevel.INFO; if (log==null) { logPrintln(level, message, null); return; } log.info(message); } /** * Info log. * * @param message the message * @param t throwable event */ public void info(final Object message, final Throwable t) { level = LogLevel.INFO; if (log==null) { logPrintln(level, message, t); return; } log.info(message, t); } /** * Debug log. * * @param message the message */ public void debug(final Object message) { level = LogLevel.DEBUG; if (log==null) { logPrintln(level, message, null); return; } log.debug(message); } /** * Debug log. * * @param message the message * @param t throwable event */ public void debug(final Object message, final Throwable t) { level = LogLevel.DEBUG; if (log==null) { logPrintln(level, message, t); return; } log.debug(message, t); } /** * Trace log. * * @param message the message */ public void trace(final Object message) { level = LogLevel.TRACE; if (log==null) { logPrintln(level, message, null); return; } log.trace(message); } /** * Trace log. * * @param message the message * @param t throwable event */ public void trace(final Object message, final Throwable t) { level = LogLevel.TRACE; if (log==null) { logPrintln(level, message, t); return; } log.trace(message, t); } /** * Gets the last log level. * * @return the last log level */ public LogLevel getLastLogLevel() { return level; } }