package fr.mch.mdo.restaurant.services.logs; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import fr.mch.mdo.i18n.IMessageQuery; import fr.mch.mdo.logs.ILogger; import fr.mch.mdo.restaurant.resources.IResources; public class LoggerImpl implements ILogger { private Logger myLog4j; private IMessageQuery loggerMessage; static { try { reload(IResources.LOG4J_CONFIGURATION_FILE); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } private static void reload(final String configFile) throws Exception { Properties properties = new Properties(); InputStream inputStream = null; try { inputStream = IResources.class.getResourceAsStream(configFile); properties.load(inputStream); PropertyConfigurator.configure(properties); } finally { inputStream.close(); } } public LoggerImpl(IMessageQuery loggerMessage) { this.loggerMessage = loggerMessage; this.myLog4j = Logger.getRootLogger(); } public LoggerImpl(IMessageQuery loggerMessage, String className) { this.loggerMessage = loggerMessage; this.myLog4j = Logger.getLogger(className); } public LoggerImpl() { this.myLog4j = Logger.getRootLogger(); } public LoggerImpl(String className) { this.myLog4j = Logger.getLogger(className); } public IMessageQuery getLoggerMessage() { return loggerMessage; } public void setLoggerMessage(IMessageQuery loggerMessage) { this.loggerMessage = loggerMessage; } public ILogger getLogger() { return new LoggerImpl(loggerMessage); } public ILogger getLogger(String className) { return new LoggerImpl(loggerMessage, className); } public void debug(String query, Throwable exception) { myLog4j.debug(processQuery(query), exception); } public void debug(String query) { myLog4j.debug(processQuery(query)); } public void info(String query, Throwable exception) { myLog4j.info(processQuery(query), exception); } public void info(String query) { myLog4j.info(processQuery(query)); } public void warn(String query, Throwable exception) { myLog4j.warn(processQuery(query), exception); } public void warn(String query) { myLog4j.warn(processQuery(query)); } public void error(String query, Throwable exception) { myLog4j.error(processQuery(query), exception); } public void error(String query) { myLog4j.error(processQuery(query)); } public void fatal(String query, Throwable exception) { myLog4j.fatal(processQuery(query), exception); } public void fatal(String query) { myLog4j.fatal(processQuery(query)); } public void debug(String query, Object[] params, Throwable exception) { myLog4j.debug(processQuery(query, params), exception); } public void debug(String query, Object[] params) { myLog4j.debug(processQuery(query, params)); } public void info(String query, Object[] params, Throwable exception) { myLog4j.info(processQuery(query, params), exception); } public void info(String query, Object[] params) { myLog4j.info(processQuery(query, params)); } public void warn(String query, Object[] params, Throwable exception) { myLog4j.warn(processQuery(query, params), exception); } public void warn(String query, Object[] params) { myLog4j.warn(processQuery(query, params)); } public void error(String query, Object[] params, Throwable exception) { myLog4j.error(processQuery(query, params), exception); } public void error(String query, Object[] params) { myLog4j.error(processQuery(query, params)); } public void fatal(String query, Object[] params, Throwable exception) { myLog4j.fatal(processQuery(query, params), exception); } public void fatal(final String query, final Object[] params) { myLog4j.fatal(processQuery(query, params)); } private String processQuery(final String query) { return processQuery(query, null); } private String processQuery(final String query, final Object[] params) { String message = query; if (loggerMessage != null) { message = loggerMessage.getMessage(message, params); } return message; } }