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

org.ioc.commons.utils.logs.Log4JFormatterLogger Maven / Gradle / Ivy

package org.ioc.commons.utils.logs;

import org.apache.log4j.Logger;
import org.ioc.commons.utils.Format;
import org.ioc.commons.utils.FormatterLogger.Implementator;

/**
 * A logger which formats messages by using {@link Format} notation.
 * 
 * When log level is not enabled, parameters are not formatted. It avoids the
 * waste of time because of parsing them.
 * 
 * @author Jesús Lunar Pérez
 */
public class Log4JFormatterLogger implements IFormatterLogger {

	private static final class Log4JLogging implements Implementator {
		@Override
		public IFormatterLogger getLogger(Class clazz) {
			return new Log4JFormatterLogger(Logger.getLogger(clazz));
		}
	}

	protected Logger logger;
	private StringBuffer dent;

	/**
	 * Get a new instance logger for the class passed as parameter.
	 * 
	 * @param clazz
	 *            Class to log.
	 * @return A new instance of a logger
	 */
	public static Log4JFormatterLogger getLogger(Class clazz) {
		return new Log4JFormatterLogger(Logger.getLogger(clazz));
	}

	protected Log4JFormatterLogger(Logger logger) {
		this.logger = logger;
	}
	/**
	 * Substitute params on a string by using the {n} notation, where 'n' is the
	 * position number of the parameter.
	 * 
	 * Example: {@code
	 * 
	 * String formattedString = Format.substitute("Name: 0}; Address: {1};",
	 * name, address);
	 * 
	 * }
	 * 
	 * @param text
	 *            Text with params notations
	 * @param params
	 *            Params to be inserted as string.
	 * @see Format#substitute(String, Object...)
	 * @return The string with substitutions.
	 */
	public static String substitute(String text, Object... params) {
		for (int i = 0; i < params.length; i++) {
			Object p = params[i];
			text = text.replaceAll("\\{" + i + "}", safeRegexReplacement(String.valueOf(p)));
		}
		return text;
	}

	protected static String safeRegexReplacement(String replacement) {
		if (replacement == null) {
			return "";
		}

		return replacement.replaceAll("\\\\", "\\\\\\\\").replaceAll("\\$", "\\\\\\$");
	}

	@Override
	public void log(Level level, String string, Object... params) {
		org.apache.log4j.Level implLevel = getImplLevel(level);
		if (logger.isEnabledFor(implLevel)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.log(implLevel, substitute(string, params));
		}
	}

	@Override
	public void log(Level level, boolean cond, String string, Object... params) {
		if (cond) {
			log(level, string, params);
		}
	}

	@Override
	public void trace(String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.TRACE)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.trace(substitute(string, params));
		}
	}

	@Override
	public void trace(boolean cond, String string, Object... params) {
		if (cond) {
			trace(string, params);
		}
	}

	@Override
	public void debug(String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.DEBUG)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.debug(substitute(string, params));
		}
	}

	@Override
	public void debug(boolean cond, String string, Object... params) {
		if (cond) {
			debug(string, params);
		}
	}

	@Override
	public void info(String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.INFO)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.info(substitute(string, params));
		}
	}

	@Override
	public void info(boolean cond, String string, Object... params) {
		if (cond) {
			info(string, params);
		}
	}

	@Override
	public void warn(String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.WARN)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.warn(substitute(string, params));
		}
	}

	@Override
	public void warn(Throwable e, String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.WARN)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.log(org.apache.log4j.Level.WARN, substitute(string, params), e);
		}
	}

	@Override
	public void warn(boolean cond, String string, Object... params) {
		if (cond) {
			warn(string, params);
		}
	}

	@Override
	public void warn(boolean cond, Throwable e, String string, Object... params) {
		if (cond) {
			warn(e, string, params);
		}
	}

	@Override
	public void error(String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.ERROR)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.log(org.apache.log4j.Level.ERROR, substitute(string, params));
		}
	}

	@Override
	public void error(Throwable e, String string, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.ERROR)) {
			if (dent != null) {
				string = dent + string;
			}
			logger.log(org.apache.log4j.Level.ERROR, substitute(string, params), e);
		}
	}

	@Override
	public void error(Throwable e) {
		if (logger.isEnabledFor(org.apache.log4j.Level.ERROR)) {
			logger.log(org.apache.log4j.Level.ERROR, null, e);
		}
	}

	@Override
	public void entering(String sourceMethod, String msg, Object... params) {
		if (logger.isEnabledFor(org.apache.log4j.Level.TRACE)) {
			if (dent != null) {
				sourceMethod = dent + sourceMethod;
			}
			logger.trace(substitute("{0} - Start. {1}", sourceMethod, substitute(msg, params)));
		}
	}

	@Override
	public void entering(String sourceMethod) {
		if (logger.isEnabledFor(org.apache.log4j.Level.TRACE)) {
			if (dent != null) {
				sourceMethod = dent + sourceMethod;
			}
			logger.trace(substitute("{0} - Start", sourceMethod));
		}
	}

	@Override
	public void exiting(String sourceMethod, String msg, Object... result) {
		if (logger.isEnabledFor(org.apache.log4j.Level.TRACE)) {
			if (dent != null) {
				sourceMethod = dent + sourceMethod;
			}
			logger.trace(substitute("{0} - End. {1}", sourceMethod, substitute(msg, result)));
		}
	}

	@Override
	public void exiting(String sourceMethod) {
		if (logger.isEnabledFor(org.apache.log4j.Level.TRACE)) {
			if (dent != null) {
				sourceMethod = dent + sourceMethod;
			}
			logger.trace(substitute("{0} - End", sourceMethod));
		}
	}

	@Override
	public boolean isTraceEnabled() {
		return logger.isEnabledFor(org.apache.log4j.Level.TRACE);
	}

	@Override
	public boolean isDebugEnabled() {
		return logger.isEnabledFor(org.apache.log4j.Level.DEBUG);
	}

	@Override
	public boolean isInfoEnabled() {
		return logger.isEnabledFor(org.apache.log4j.Level.INFO);
	}

	@Override
	public boolean isWarnEnabled() {
		return logger.isEnabledFor(org.apache.log4j.Level.WARN);
	}

	@Override
	public boolean isErrorEnabled() {
		return logger.isEnabledFor(org.apache.log4j.Level.ERROR);
	}

	@Override
	public void indent() {
		if (dent == null) {
			dent = new StringBuffer();
		}

		dent.append('\t');
	}

	@Override
	public void outdent() {
		if (dent != null && dent.length() > 0) {
			dent.setLength(dent.length() - 1);
		}
	}

	public static Implementator implementator() {
		return new Log4JLogging();
	}

	private org.apache.log4j.Level getImplLevel(Level level) {
		switch (level) {
		case DEBUG:
			return org.apache.log4j.Level.DEBUG;
		case ERROR:
			return org.apache.log4j.Level.ERROR;
		case INFO:
			return org.apache.log4j.Level.INFO;
		case TRACE:
			return org.apache.log4j.Level.TRACE;
		case WARNING:
			return org.apache.log4j.Level.WARN;
		default:
			throw new IllegalArgumentException("Unrecognized level " + level);
		}
	}

	@Override
	public Level getLevel() {
		org.apache.log4j.Level level = logger.getLevel();
		if (org.apache.log4j.Level.TRACE.equals(level)) {
			return Level.TRACE;
		} else if (org.apache.log4j.Level.DEBUG.equals(level)) {
			return Level.DEBUG;
		} else if (org.apache.log4j.Level.INFO.equals(level)) {
			return Level.INFO;
		} else if (org.apache.log4j.Level.WARN.equals(level)) {
			return Level.WARNING;
		} else if (org.apache.log4j.Level.ERROR.equals(level)) {
			return Level.ERROR;
		} else {
			return null;
		}
	}

	@Override
	public IFormatterLogger getParent() {
		return new Log4JFormatterLogger((Logger) (logger.getParent() instanceof Logger ? logger.getParent() : null));
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy