hey!-is there something wrong with my application on tomcat-jakarta-log4j?
843841Apr 20 2006 — edited Apr 25 2006I just have a few questions about log4j and servlets, is it wrong my configuration? it doesn't work my logger, first i created a servlet ( SetupServlet.java) with this is the code for my application:
import java.io.File;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.LineNumberReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Vector;
import java.sql.Driver;
import java.sql.DriverManager;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class SetupServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
String props = config.getInitParameter("log4j-init-file");
if(props == null || props.length() == 0 ||
!(new File(props)).isFile()) {
System.err.println(
"ERROR: No se puede leer el archivo de configuracion. " +
"Favor de verificar la ruta del parametro de la ruta de "+
"configuracion en el archivo web.xml");
throw new ServletException();
}
String watch = config.getInitParameter("watch");
System.err.println("Usando el archivo log4j.properties = " + props);
System.err.println("Watch es cambiado a : " + watch);
if(watch != null && watch.equalsIgnoreCase("true"))
PropertyConfigurator.configureAndWatch(props);
else
PropertyConfigurator.configure(props);
Logger log = Logger.getLogger(SetupServlet.class);
}
public void destroy() {
super.destroy();
}
}
then i load it in the web.xml like this:
<servlet>
<servlet-name>SetupServlet</servlet-name>
<servlet-class>SetupServlet</servlet-class>
</servlet>
and also the main application have parameters to load the log4j.properties file and i'm sure that it is in the same path where is my app, i.e. myapp/WEB-INF/classes/log4j.properties, in the same web.xml file like this:
<servlet>
<servlet-name>Validador</servlet-name>
<servlet-class>Validador</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<init-param>
<param-name>watch</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
the "log4j.properties" file contains this code:
#### Este configurador usa 2 appenders, uno para mostrar en la pantalla y otro
#### para log a un archivo
log4j.rootCategory=ALL, stdout, R
# Imprime solo mensajes de prioridad DEBUG o mas arriba de la categoria
log4j.category.Validador=DEBUG
#### Primero el appender escribe a la pantalla
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# El patron para la salida a la pantalla y numero de linea.
log4j.appender.stdout.layout.ConversionPattern=%d{DATE} - %-5p [%t] %-4r %-4l _%x_ %m\n
#- File=nomdelog.txt: Manda a un nombre de achivo los mensajes. Puedes usar
# ${alguna_clave_de_propiedad} (por ejemplo,las propiedades del sistema
# java.home o user.home) para especificar la ruta al principio. De hecho,
# todas las opciones de clave de propiedad aceptan estos tipos de valores.
# ejemplo: ${user.dir}logs/sacip.log
# log4j.appender.R=org.apache.log4j.FileAppender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=sacip.log
#- MaxFileSize=100KB: El sufijo puede ser KB, MB o GB. rola el archivo log
#a otro despues de que el tama�o se alcanza.
#- MaxBackupIndex=2: Mantiene un maximo de 2 achivos de respaldo.
#Borra el(los) antig�o(s) archivo(s). 0 significa sin archivos de respaldo.
# Controla el maximo tama�o del archivo de logs
log4j.appender.R.MaxFileSize=1MB
# Respaldos del archivo de logs
log4j.appender.R.MaxBackupIndex=1
#### Por ultimo el patron del appender que escribe al archivo
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{DATE} - %-5p [%t] %-4r %-4l _%x_ %m\n
when i run my app and a user enter, the follow is what i get from de tomcat-jakarta console:
log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [org.apache.catalina.loader.StandardClassLoader@e5855a] whereas object of type
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [WebappClassLoader delegate: false repositories: /WEB-INF/classes/----------> Parent Classloader:org.apache.catalina.loader.StandardClassLoader@908881].
log4j:ERROR Could not instantiate appender named "stdout".
log4j:ERROR A "org.apache.log4j.RollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [org.apache.catalina.loader.StandardClassLoader@e5855a] whereas object of type
log4j:ERROR "org.apache.log4j.RollingFileAppender" was loaded by [WebappClassLoader delegate: false repositories: /WEB-INF/classes/----------> Parent Classloader:org.apache.catalina.loader.StandardClassLoader@908881].
log4j:ERROR Could not instantiate appender named "R".
my path for the log4j.x.x.jar is:
LOG4J_HOME
e:\Java\jdk1.5.0_03\ext\logging-log4j-1.2.13\dist\lib
and i also put the log4j.x.x.jar yet there.
my question is: what i have to do to correct the errors, i had made examples and they work but with servlets i have problems, if anybody had tried tell me how, thanks.