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

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

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

import static org.unidal.lookup.logging.Logger.LEVEL_DEBUG;
import static org.unidal.lookup.logging.Logger.LEVEL_ERROR;
import static org.unidal.lookup.logging.Logger.LEVEL_INFO;
import static org.unidal.lookup.logging.Logger.LEVEL_WARN;

import java.io.File;
import java.net.URL;

import javax.xml.parsers.FactoryConfigurationError;

import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.Priority;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import org.unidal.helper.Properties;
import org.unidal.lookup.extension.Initializable;
import org.unidal.lookup.extension.InitializationException;

public class Log4jLoggerManager extends AbstractLoggerManager implements LoggerManager, Initializable {
	private String m_configurationFile = "log4j.xml";

	private String m_baseDirRef;

	@Override
	protected org.unidal.lookup.logging.AbstractLogger createLogger(String name) {
		Logger logger = LogManager.getLogger(name);
		LevelAdapter level = new LevelAdapter(logger.getLevel());

		return new LoggerAdapter(logger, level.getThreshold());
	}

	@Override
	public void initialize() throws InitializationException {
		String baseDir = Properties.forString().fromSystem().fromEnv().getProperty(m_baseDirRef, null);
		boolean loaded = false;

		if (baseDir != null) {
			loaded = tryLoadingFromFile(baseDir);
		}

		if (!loaded) {
			loaded = tryLoadingFromResource();
		}

		if (!loaded) {
			LogManager.getLogger(getClass().getName()).warn(
			      String.format("No configuration(%s) was found with baseDirRef(%s)!", m_configurationFile, m_baseDirRef));
		}
	}

	public void setBaseDirRef(String baseDirRef) {
		m_baseDirRef = baseDirRef;
	}

	public void setConfigurationFile(String configurationFile) {
		m_configurationFile = configurationFile;
	}

	private boolean tryLoadingFromFile(String baseDir) throws FactoryConfigurationError {
		if (m_configurationFile.endsWith(".xml")) {
			File file = new File(baseDir, m_configurationFile);

			if (file.exists()) {
				DOMConfigurator.configure(file.getAbsolutePath());
				return true;
			}
		} else if (m_configurationFile.endsWith(".properties")) {
			File file = new File(baseDir, m_configurationFile);

			if (file.exists()) {
				PropertyConfigurator.configure(file.getAbsolutePath());
				return true;
			}
		}

		return false;
	}

	private boolean tryLoadingFromResource() throws FactoryConfigurationError {
		if (m_configurationFile.endsWith(".xml")) {
			URL url = getClass().getResource(m_configurationFile);

			if (url != null) {
				DOMConfigurator.configure(url);
				return true;
			}
		} else if (m_configurationFile.endsWith(".properties")) {
			URL url = getClass().getResource(m_configurationFile);

			if (url != null) {
				PropertyConfigurator.configure(url);
				return true;
			}
		}

		return false;
	}

	static class LevelAdapter {
		private int m_threshold;

		public LevelAdapter(Level level) {
			m_threshold = LEVEL_DEBUG;

			if (level != null) {
				switch (level.toInt()) {
				case Priority.DEBUG_INT:
					m_threshold = LEVEL_DEBUG;
					break;
				case Priority.INFO_INT:
					m_threshold = LEVEL_INFO;
					break;
				case Priority.WARN_INT:
					m_threshold = LEVEL_WARN;
					break;
				case Priority.ERROR_INT:
					m_threshold = LEVEL_ERROR;
					break;
				}
			}
		}

		public int getThreshold() {
			return m_threshold;
		}
	}

	static class LoggerAdapter extends AbstractLogger {
		private Logger m_logger;

		public LoggerAdapter(Logger logger, int threshold) {
			super(threshold, logger.getName());

			m_logger = logger;
		}

		@Override
		public void debug(String message, Throwable t) {
			if (isDebugEnabled()) {
				m_logger.debug(message, t);
			}
		}

		@Override
		public void error(String message, Throwable t) {
			if (isErrorEnabled()) {
				m_logger.error(message, t);
			}
		}

		@Override
		public void info(String message, Throwable t) {
			if (isInfoEnabled()) {
				m_logger.info(message, t);
			}
		}

		@Override
		public void warn(String message, Throwable t) {
			if (isWarnEnabled()) {
				m_logger.warn(message, t);
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy