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

org.unidal.lookup.logging.TimedConsoleLogger Maven / Gradle / Ivy

The newest version!
package org.unidal.lookup.logging;

import java.text.MessageFormat;
import java.util.Date;

import org.unidal.helper.Threads;

public class TimedConsoleLogger extends AbstractLogger implements Logger {
   private MessageFormat m_format;

   private boolean m_showClass;

   public TimedConsoleLogger(int threshold, String name, String dateFormat, boolean showClass) {
      super(threshold, name);

      String pattern;

      if (showClass) {
         pattern = "[{0,date," + dateFormat + "}] [{1}] [{3}] {2}";
      } else {
         pattern = "[{0,date," + dateFormat + "}] [{1}] {2}";
      }

      m_showClass = showClass;
      m_format = new MessageFormat(pattern);
   }

   @Override
   public void debug(String message, Throwable throwable) {
      if (isDebugEnabled()) {
         out("DEBUG", message, throwable);
      }
   }

   @Override
   public void error(String message, Throwable throwable) {
      if (isErrorEnabled()) {
         out("ERROR", message, throwable);
      }
   }

   private String getCallerClassName() {
      String caller = Threads.getCallerClass();

      if (caller != null) {
         return caller;
      }

      StackTraceElement[] elements = new Exception().getStackTrace();

      if (elements.length > 5) {
         for (int i = 5; i < elements.length; i++) {
            String className = elements[i].getClassName();

            if (TimedConsoleLoggerManager.shouldSkipClass(className)) {
               continue;
            }

            int pos = className.lastIndexOf('$');

            if (pos < 0) {
               pos = className.lastIndexOf('.');
            }

            if (pos > 0) {
               return className.substring(pos + 1);
            } else {
               return className;
            }
         }
      }

      return "N/A";
   }

   private String getTimedMessage(String level, String message) {
      if (m_showClass) {
         return m_format.format(new Object[] { new Date(), level, message, getCallerClassName() });
      } else {
         return m_format.format(new Object[] { new Date(), level, message });
      }
   }

   @Override
   public void info(String message, Throwable throwable) {
      if (isInfoEnabled()) {
         out("INFO", message, throwable);
      }
   }

   private void out(String severity, String message, Throwable throwable) {
      String timedMessage = getTimedMessage(severity, message);

      System.out.println(timedMessage);

      if (throwable != null) {
         throwable.printStackTrace(System.out);
      }
   }

   @Override
   public void warn(String message, Throwable throwable) {
      if (isWarnEnabled()) {
         out("WARN", message, throwable);
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy