[RISOLTO] Log4j2: configurazione path file loggin in webapp

di il
1 risposte

[RISOLTO] Log4j2: configurazione path file loggin in webapp

Ciao a tutti,

ho un Web Dynamic Project in Eclipse ed ho configurato il file log4j2.xml nel seguente modo:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Properties>
		<Property name="LOG_DIR_PATH">logs</Property>
		<Property name="LOG_PATTERN_LAYOYT">%d{DATE} [%t] : %-6p : %C (%M:%L): %m%n</Property>
	</Properties>
	<Appenders>
		<!-- Console Appender -->
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="${LOG_PATTERN_LAYOYT}" />
		</Console>
		<!-- Main log -->
		<File name="File" fileName="${LOG_DIR_PATH}/main.log">
			<PatternLayout pattern="${LOG_PATTERN_LAYOYT}" />
		</File>
	</Appenders>
	<Loggers>
		<Logger name="MainLogger" level="debug" additivity="false">
			<AppenderRef ref="File" />
			<AppenderRef ref="Console" />
		</Logger>
	</Loggers>
</Configuration>

La configurazione funziona ed il file main.log viene correttamente creato nella cartella logs:

Quando però genero il file war del progetto ed eseguo il deploy sotto Tomcat, il file main.log viene creato sotto ${TOMCAT_HOME}/logs.

L'obiettivo è quello, invece, di creare il file sotto ${TOMCAT_HOME}/${webapp}/WEB-INF/logs.

Come devo configurare il path nel file log4j2.xml per far si che ciò avvenga?

Grazie in anticipo

1 Risposte

  • Re: [RISOLTO] Log4j2: configurazione path file loggin in webapp

    Ho trovato una soluzione, non so se sia la migliore ma nel mio caso ha funzionato. La posto nel caso possa aiutare qualcun altro.

    Creare un context listner custom dove salvare una variabile di sistema con il path della webapp

    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class AppContextListener implements ServletContextListener {
    
        public void contextInitialized(ServletContextEvent servletContextEvent) {
        	ServletContext context = servletContextEvent.getServletContext();
            System.setProperty("rootPath", context.getRealPath("/"));
        }
    
    	@Override
    	public void contextDestroyed(ServletContextEvent sce) {
    		
    	}
    }

    nell'esempio, salvo la variabile di sistema rootPath.

    Utilizzare questa variabile nella configurazione del log4j2.xml (riporto solo la parte modificata rispetto a quanto postato sopra)

    ...
    		<Property name="LOG_DIR_PATH">${sys:rootPath}WEB-INF/logs</Property>
    ...

    In questo modo, supponendo che la webapp venga rilasciata al path C:\Tomcat\WebAppTest, il file main.log sarà creato al path C:\Tomcat\WebAppTest\WEB-INF\logs

Devi accedere o registrarti per scrivere nel forum
1 risposte