Utilizzando la classe org.apache.log4j.MDC è possibile inserire dei parametri in una mappa e poi riutilizzarli nei nostri appender, sfruttando il conversion pattern dell'appender.
Vediamo un esempio.
Per prima cosa dobbiamo definire un Filtro Http che inserisca nella mappa i valori, supponiamo di voler inserire l'indirizzo IP del chiamante.
Filtro
Impostazioni log4j.properties
si noti in particolare la riga in grassetto, che consente di recuperare il valore presente nell'MDC
##############################################################
################### DEFINIZIONE DEI LOGGER ###################
##############################################################
log4j.rootLogger=DEBUG
#Gestione log4j riguardante esclusivamente la comunicazione del Datagroup del log garante.
log4j.logger.MyLogger.logIp=INFO, LogIp
log4j.appender.LogIp=org.apache.log4j.DailyRollingFileAppender
## Inserire il percorso assoluto del file "
log4j.appender.LogIp.File=
log4j.appender.LogIp.layout=org.apache.log4j.PatternLayout
log4j.appender.LogIp.layout.ConversionPattern=%d{dd-MM-yyyy HH\:mm\:ss} %X{ipHost} %m%n
log4j.appender.LogIp.DatePattern='.'yyyy-MM-dd'.log'
Caricamento lato web del log4j.properties
Il log4j.properties si può caricare in una Servlet con parametro load on startup pari a 0, ossia una servlet il cui metodo init è richiamato allo start up della Web App
Utilizzo del logger
Come al solito si utilizzerà il logger richiamandolo così nei punti di interesse:
Risultato nel file di log
08-04-2014 19:02:00 10.249.232.187 dati loggati.....;
Vediamo un esempio.
Per prima cosa dobbiamo definire un Filtro Http che inserisca nella mappa i valori, supponiamo di voler inserire l'indirizzo IP del chiamante.
Filtro
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.MDC;
public class MyMdcFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Utente utente = null;
try {
String ip = request.getRemoteAddr();
MDC.put("ipHost",ip);
chain.doFilter(request, response);
} finally {
MDC.remove("ipHost");
}
}
public void destroy() {
}
public void init(FilterConfig arg0) throws ServletException {
}
}
Impostazioni log4j.properties
si noti in particolare la riga in grassetto, che consente di recuperare il valore presente nell'MDC
##############################################################
################### DEFINIZIONE DEI LOGGER ###################
##############################################################
log4j.rootLogger=DEBUG
#Gestione log4j riguardante esclusivamente la comunicazione del Datagroup del log garante.
log4j.logger.MyLogger.logIp=INFO, LogIp
log4j.appender.LogIp=org.apache.log4j.DailyRollingFileAppender
## Inserire il percorso assoluto del file "
log4j.appender.LogIp.File=
log4j.appender.LogIp.layout=org.apache.log4j.PatternLayout
log4j.appender.LogIp.layout.ConversionPattern=%d{dd-MM-yyyy HH\:mm\:ss} %X{ipHost} %m%n
log4j.appender.LogIp.DatePattern='.'yyyy-MM-dd'.log'
Caricamento lato web del log4j.properties
Il log4j.properties si può caricare in una Servlet con parametro load on startup pari a 0, ossia una servlet il cui metodo init è richiamato allo start up della Web App
File log4jAppl = new File( PATH_FILE );
// da gestire nel caso in cui il file non sia indicato, si potrebbe loggare internamente
PropertyConfigurator.configure(log4jProp);
Utilizzo del logger
Come al solito si utilizzerà il logger richiamandolo così nei punti di interesse:
private static Logger myLog= Logger.getLogger("MyLogger.logIp");
Risultato nel file di log
08-04-2014 19:02:00 10.249.232.187 dati loggati.....;
Nessun commento:
Posta un commento