Aby byla implementace více prostředí ve Springu kompletní, tak ještě zbývá vyřešit nastavení logování (konkrétně Log4j) pro jednotlivá prostředí. Logger se spouští odděleně od vlastní inicializace Springu a samozřejmě by se měl spouštět jako první. Možná si někdo řekne, že už je to přehnané mít více nastavení loggerů, ale my jsme ty požadavky měly - produkční logger posílá chyby mailem, logger pro vývoj pouze loguje na konzoli a logger pro akceptační testy loguje do souboru. Zde je vidět, že potřeba více loggerů opravdu je.
Tento článek se odvolává na věci uvedené v předchozích článcích na toto téma - Více prostředí pomocí Springu, úvod a Více prostředí pomocí Springu, implementace.
Zjištění cesty ke konfiguraci loggeru
Nastavení loggeru bude umístěno v souboru log4j.xml v adresářích představující jednotlivá prostředí (DEVELOP, ANECT, apod.). Podle volby prostředí v konf. souboru config.properties je potřeba zjistit cestu ke správné konfiguraci loggeru. Do třídy EnvironmentUtils přidáme následující metodu:/**
* Method returns location of log4j configuration file.
* @return path to log4j conf. file
*/
public static String getLog4jConfigLocation() {
return "classpath:/config/env/" + getEnvironment() + "/log4j.xml";
}
Vlastní implementace Log4jConfigListener
Známe cestu ke konfiguraci a potřebujeme podle toho upravit standardní Log4jConfigListener./**Na závěr je ještě nutné upravit konfiguraci web.xml.
* Custom listener for log4j inicialization.
*
* This listener is aware of different environments.
*
* @author pjuza@anect.com
*/
public class EnvironmentAwareLog4jConfigListener extends Log4jConfigListener {
/**
* This method is overridden because we need to have environment aware initialization.
* From this reason we need to use custom Log4j configurer.
*/
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
String location = EnvironmentUtils.getLog4jConfigLocation();
// Write log message to server log.
servletContext.log("Initializing Log4J from [" + location + "]");
//Expose the web app root system property.
WebUtils.setWebAppRootSystemProperty(servletContext);
try {
Log4jConfigurer.initLogging(location);
}
catch (FileNotFoundException ex) {
servletContext.log("Log4J config file [" + location + "] not found", ex);
}
}
}
<listener>
<listener-class>cz.anect.mis.utils.config.EnvironmentAwareLog4jConfigListener</listener-class>
</listener>
Žádné komentáře:
Okomentovat