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

ru.dmerkushov.loghelper.LogHelper Maven / Gradle / Ivy

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.dmerkushov.loghelper;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Properties;

/**
 * @deprecated Use the LoggerWrapper class instead
 * @author Dmitriy Merkushov
 * @see LoggerWrapper
 */
public class LogHelper {

	public static final int LOG_TO_PRINTSTREAM = 0;
	public static final int LOG_TO_LOG4J = 1;
	public static final int LOG_TO_JAVASTANDARD = 2;
	private static int logTo = LOG_TO_PRINTSTREAM;
	public static final String LOG_LOG = "LOG  ";
	public static final String LOG_ERROR = "ERROR";
	public static final String LOG_EXCEPTION = "EXCPT";
	public static final String LOG_PROPERTIES = "PROPS";
	private static final org.apache.log4j.Logger log4jLogger = org.apache.log4j.Logger.getRootLogger ();
	private static final java.util.logging.Logger javaStandardLogger = java.util.logging.Logger.getAnonymousLogger ();
	private static final SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.S Z");
	private static boolean isInitialized = false;
	private static PrintStream logPrintStream = System.out;

	/**
	 * Common initialization of the LogHelper
	 */
	private static void initializeCommon () {
	}

	/**
	 * Initialize LogHelper to default values
	 */
	public static void initializeLogHelper () {
		LogHelper.initializePrintStream (System.out);
		isInitialized = true;
	}

	public static int getLogTo () {
		return logTo;
	}

	private static void setLogTo (int logTo) {
		LogHelper.logTo = logTo;
	}

	public static java.util.logging.Logger getJavaStandardLogger () {
		return javaStandardLogger;
	}

	public static org.apache.log4j.Logger getLog4jLogger () {
		return log4jLogger;
	}

	public static void log (String msg) {
		StackTraceElement caller = getCallerStackTraceElement ();
		log (msg, caller);
	}

	public static void log (String msg, StackTraceElement caller) {
		if (caller != null) {
			msg = sdf.format (new java.util.Date ()) + ": " + caller.getClassName () + ":" + caller.getMethodName () + "():" + caller.getLineNumber () + ": " + msg;
		} else {
			msg = sdf.format (new java.util.Date ()) + ": " + "(Unknown class)" + ":" + "(Unknown method)" + "():" + "(Unknown line number)" + ": " + msg;
		}

		LogHelper.writeToLog (msg, LOG_LOG, org.apache.log4j.Level.INFO, java.util.logging.Level.INFO);
	}

	public static void logErr (String msg) {
		StackTraceElement caller = getCallerStackTraceElement ();
		logErr (msg, caller);
	}

	public static void logErr (String msg, StackTraceElement caller) {
		if (caller != null) {
			msg = sdf.format (new java.util.Date ()) + ": " + caller.getClassName () + ":" + caller.getMethodName () + "():" + caller.getLineNumber () + ": " + msg;
		} else {
			msg = sdf.format (new java.util.Date ()) + ": " + "(Unknown class)" + ":" + "(Unknown method)" + "():" + "(Unknown line number)" + ": " + msg;
		}

		LogHelper.writeToLog (msg, LOG_ERROR, org.apache.log4j.Level.WARN, java.util.logging.Level.WARNING);
	}

	public static void logException (Throwable t) {
		String msg = sdf.format (new java.util.Date ()) + ": " + LogHelper.getFullThrowableMsg (t);
		LogHelper.writeToLog (msg, LOG_EXCEPTION, org.apache.log4j.Level.ERROR, java.util.logging.Level.SEVERE);
	}

	public static PrintStream getLogPrintStream () {
		return LogHelper.logPrintStream;
	}

	public static void setLogPrintStream (PrintStream printStream) {
		LogHelper.logPrintStream = printStream;
	}

	public static void initializePrintStream (PrintStream logPrintStream) {
		LogHelper.initializeCommon ();
		LogHelper.setLogTo (LogHelper.LOG_TO_PRINTSTREAM);
		if (!LogHelper.logPrintStream.equals (logPrintStream)) {
			LogHelper.setLogPrintStream (logPrintStream);
		}
		isInitialized = true;
	}

	public static void initializePrintStreamToFile (String filename) throws FileNotFoundException {
		PrintStream logPrintStreamToSet = new PrintStream (filename);
		initializePrintStream (logPrintStreamToSet);
		isInitialized = true;
	}

	public static void initializePrintStreamToFile (File file) throws FileNotFoundException {
		PrintStream logPrintStreamToSet = new PrintStream (file);
		initializePrintStream (logPrintStreamToSet);
		isInitialized = true;
	}

	public static void initializeLog4j () {
		LogHelper.initializeCommon ();

		log4jLogger.setLevel (org.apache.log4j.Level.ALL);
		log4jLogger.removeAllAppenders ();
		log4jLogger.addAppender (new org.apache.log4j.ConsoleAppender (new org.apache.log4j.PatternLayout ("%m\n"), "System.out"));

		LogHelper.setLogTo (LogHelper.LOG_TO_LOG4J);

		LogHelper.isInitialized = true;

	}

	public static void initializeJavaStandard () {
		LogHelper.initializeCommon ();

		javaStandardLogger.setLevel (java.util.logging.Level.ALL);
		java.util.logging.Handler[] handlers = javaStandardLogger.getHandlers ();
		for (java.util.logging.Handler handler : handlers) {
			javaStandardLogger.removeHandler (handler);
		}
		java.util.logging.Formatter formatter = new java.util.logging.Formatter () {

			@Override
			public String format (java.util.logging.LogRecord record) {
				return record.getMessage ();
			}
		};
		java.util.logging.Handler conHandler = new java.util.logging.StreamHandler (System.out, formatter);
		javaStandardLogger.addHandler (conHandler);

		LogHelper.setLogTo (LogHelper.LOG_TO_JAVASTANDARD);

		LogHelper.isInitialized = true;
	}

	public static void logEntering () {
		StackTraceElement caller = getCallerStackTraceElement ();
		logEntering (null, caller);
	}

	public static void logEntering (Object[] parameters) {
		StackTraceElement caller = getCallerStackTraceElement ();
		logEntering (parameters, caller);
	}

	public static void logEntering (Object[] parameters, StackTraceElement caller) {
		String msg = "Entering.";

		if (parameters != null) {
			for (int paramIndex = 0; paramIndex < parameters.length; paramIndex++) {
				Object parameter = parameters[paramIndex];

				if (parameter != null) {
					msg += "\nParameter " + String.valueOf (paramIndex) + " is a " + parameter.getClass ().getName () + ": >" + parameter.toString () + "<";
				} else {
					msg += "\nParameter " + String.valueOf (paramIndex) + " is null.";
				}
			}
		}

		LogHelper.log (msg, caller);
	}

	public static void logExiting () {
		StackTraceElement caller = getCallerStackTraceElement ();

		logExiting (null, true, caller);
	}

	public static void logExiting (Object returnValue) {
		StackTraceElement caller = getCallerStackTraceElement ();

		logExiting (returnValue, false, caller);
	}

	public static void logExiting (Object returnValue, StackTraceElement caller) {
		logExiting (returnValue, false, caller);
	}

	public static void logExiting (Object returnValue, boolean isVoidMethod, StackTraceElement caller) {
		String msg = "Exiting.";

		if (returnValue != null) {
			msg += " Returning " + returnValue.getClass ().getName () + ": >" + returnValue.toString () + "<";
		} else {
			if (!isVoidMethod) {
				msg += " Returning null.";
			}
		}

		LogHelper.log (msg, caller);
	}

	public static void logProperties (Properties props, String comment) {
		ByteArrayOutputStream propsBaos = new ByteArrayOutputStream ();

		try {
			props.store (propsBaos, comment);
		} catch (IOException ex) {
			LogHelper.logException (ex);
		}

		//String charset = java.nio.charset.Charset.defaultCharset ().name ();
		String charset = "UTF-8";

		String propsStr = null;
		try {
			propsStr = propsBaos.toString (charset);
		} catch (UnsupportedEncodingException ex) {
			LogHelper.logException (ex);
		}

		LogHelper.writeToLog (propsStr, LOG_PROPERTIES, org.apache.log4j.Level.INFO, java.util.logging.Level.CONFIG);
	}

	/*
	 * *************************************************************************
	 * Utility methods
	 * ************************************************************************
	 */
	private static void writeToLog (String msg, String logPrefix, org.apache.log4j.Level log4jLevel, java.util.logging.Level javaStandardLevel) {
		msg = logPrefix + " " + Thread.currentThread ().getName () + " " + msg.replaceAll ("\n", "\n" + logPrefix + " ");

		if (log4jLevel == null) {
			log4jLevel = org.apache.log4j.Level.INFO;
		}

		if (javaStandardLevel == null) {
			javaStandardLevel = java.util.logging.Level.INFO;
		}

		switch (logTo) {
			case (LOG_TO_PRINTSTREAM):
				logPrintStream.println (msg);
				break;
			case (LOG_TO_LOG4J):
				log4jLogger.log (log4jLevel, msg);
				break;
			case (LOG_TO_JAVASTANDARD):
				javaStandardLogger.log (javaStandardLevel, msg);
				break;
		}
	}

	public static StackTraceElement getCallerStackTraceElement () {
		StackTraceElement toReturn = null;

		StackTraceElement[] stackTraceElements = Thread.currentThread ().getStackTrace ();
		if (stackTraceElements != null) {
			if (stackTraceElements.length > 3) {
				toReturn = stackTraceElements[3];
			}
		}

		return toReturn;
	}

	private static String getFullThrowableMsg (Throwable t) {
		String msg = t.getClass ().getCanonicalName () + ": " + t.getMessage ();

		StackTraceElement[] stackTraceElements = t.getStackTrace ();

		if (stackTraceElements != null) {
			if (stackTraceElements.length > 0) {
				msg += "\nStack Trace:\n";

				StackTraceElement stackTraceElement = stackTraceElements[0];
				msg += "\t" + stackTraceElement.getClassName () + ":" + stackTraceElement.getMethodName () + "():" + stackTraceElement.getLineNumber ();

				for (int i = 1; i < stackTraceElements.length; i++) {
					stackTraceElement = stackTraceElements[i];
					msg += "\n\tat " + stackTraceElement.getClassName () + ":" + stackTraceElement.getMethodName () + "():" + stackTraceElement.getLineNumber ();
				}
			}
		}

		Throwable cause = t.getCause ();

		if (cause != null) {
			msg += "\nCaused by:\n" + LogHelper.getFullThrowableMsg (cause);
		}

		return msg;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy