Como primera acción debemos incluir la librería (jar) de Log4j en nuestro proyecto
Log4jInit.java
package cl.ruta.package;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.PropertyConfigurator;
/**
* Servlet implementation class for Servlet: Log4jInit
*
* Servlet que permite obtener la ruta del contexto de la aplicacion, con el fin
* de poder setear la ruta para la generacion del LOG del Sistema log4j.
*
*/
public class Log4jInit extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
/**
* Inicializacion de LOG4J en base a lo descrito en {@link log4j.properties}
*/
public void init() throws ServletException {
Properties prop = new Properties();
FileInputStream is = null;
/*
* Obtengo el contexto de la apliación
*/
String prefix = getServletContext().getRealPath("/");
/*
* Cargo desde el web.xml la ruta en donde se encontrara el archivo
* properties
*/
String file = getInitParameter("log4j-init-file");
try {
/*
* Abre el fichero y carga el properties
*/
is = new FileInputStream(prefix + file);
prop.load(is);
} catch (IOException ioe) {
ioe.printStackTrace();
}
FileOutputStream out = null;
/*
* Se guarda la modificacion y se carga para log4j
*/
try {
out = new FileOutputStream(prefix + file);
prop.store(out, "---No Comment---");
out.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
/*
* Setea para el log4j el properties modificado
*/
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
}
El Servler debe ser agregado al archivo web.xml
<servlet>
<servlet-name>Log4jInit</servlet-name>
<servlet-class>cl.ruta.package.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-name>Log4jInit</servlet-name>
<servlet-class>cl.ruta.package.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
luego agregamos el log4j.properties (Donde quedo definido en el param del web.xml) en mi caso quedo en "
# ***** Tipos de salida que tendra el LOG.
log4j.rootLogger=debug,R
# Configuración Registro en archivo
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/webapps/[contexto]/WEB-INF/log/[archivo_log].log
log4j.appender.R.MaxFileSize=250KB
log4j.appender.R.MaxBackupIndex=20
# ***** Encoding de salida
log4j.appender.R.Encoding=UTF-8
# ***** Patternlayout indica el tipo de formato usado
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{dd-MMM-yyyy HH:mm:ss}] %p %m%n
por ultimo lo agregamos en las clases java.
import org.apache.log4j.Logger;
/* Dentro de la clase*/
private Logger log = Logger.getLogger(this.getClass());
private String clase = this.getClass().getName().toString();
/*donde se quiere imprimir el mensaje*/
log.debug(clase +"::mensaje:" );
/*Si es dentro de un exception*/
catch (Exception e) {
log.debug(clase +"::Exception::", e);
}