/*
* Copyright 2011 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.x38.log;
import java.io.File;
import java.io.FileNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import org.springframework.util.SystemPropertyUtils;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
/**
*
* Class responsible for setting logback. Perform the following actions:
* 1- Is responsible for collecting the settings for logback and applied to the system's log
*
* @author UDA
*
*/
public abstract class LogbackConfigurer
{
public static final String CLASSPATH_URL_PREFIX = "classpath:";
public static final String XML_FILE_EXTENSION = ".xml";
final static Logger logger = LoggerFactory.getLogger(LogbackConfigurer.class);
public static void initLogging(String location, boolean printState) throws FileNotFoundException {
logger.info("Begins the initialization of system logs");
String resolvedLocation = null;
File file = null;
StringBuilder compositeLocator = new StringBuilder(CLASSPATH_URL_PREFIX);
compositeLocator.append(location);
//Validates that the URL is an XML file
if(location.contains(XML_FILE_EXTENSION)){
//Is collected, as may be absolute or relative to classpath, and validates the correctness of the URL of the configuration file.
try {
resolvedLocation = SystemPropertyUtils.resolvePlaceholders(compositeLocator.toString());
file = ResourceUtils.getFile(resolvedLocation);
logger.info("Read file => "+file.toString());
} catch (FileNotFoundException fileNotFoundException) {
try{
resolvedLocation = SystemPropertyUtils.resolvePlaceholders(location);
file = ResourceUtils.getFile(resolvedLocation);
logger.info("Read file => "+file.toString());
} catch (FileNotFoundException fileNotFoundExceptionAbsolut) {
logger.error("There has been an error of incorrect path. The route is not included in the application classpath or an absolute path is correct.", fileNotFoundExceptionAbsolut);
}
}
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
try {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
//The context was probably already configured by default configuration rules
lc.reset();
//Applies the new configuration
configurator.doConfigure(file);
} catch (JoranException je) {
FileNotFoundException fnfe = new FileNotFoundException("There was an error initializing the system logs (logback). The specified file is incorrect or corrupt. "+ je.getMessage());
throw(fnfe);
}
if (printState){
lc.getStatusManager();
}
} else {
//Not being a path to an xml file an exception is raised and does not load
FileNotFoundException exc = new FileNotFoundException("The file specified for logback settings should be an xml file.");
logger.error("There has been an error of incorrect path. The route is not included in the application classpath or an absolute path is correct.", exc);
throw exc;
}
file = null;
logger.info("Ends the initialization of system logs");
}
}