Hello,
this message has to do with the following thread
http://mail-archives.apache.org/mod_mbox/logging-log4j-user/200305.mbox/[EMAIL PROTECTED]
and as I'm experiencing some problems with the KeyFileAppender class
thought you could help me.
I've got a configuration file exactly like this one:
# Set the logger factory
log4j.loggerFactory=Logica.SegLoggerFactory
# Attach appender Appender to root. Set root level to Level.DEBUG.
log4j.rootLogger=WARN, Appender
log4j.debug=true
log4j.appender.Appender=Logica.KeyFileAppender
log4j.appender.Appender.File=C:\\emedica\\SEG_QUIM\\aplicacion\\filesystem\\securequim\\app2.log
log4j.appender.Appender.ContextKey=USER_ID
log4j.appender.Appender.Threshold=INFO
log4j.appender.Appender.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender.layout.ConversionPattern=%-5p %d{dd MMM yyyy
HH:mm:ss} [%c] - %m%n
I've created a SegLogger, which extends the Logger class, as well as the
corresponding SegLoggerFactory, which extends LoggerFactory. Just as in
the examples of the log4j package. I've put those new classe in a
package of my own called Logica. I've put the KeyFileAppender class
there as well.
package Logica;
import org.apache.log4j.Logger;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Appender;
import org.apache.log4j.Level;
public class SegLogger extends Logger {
// It's usually a good idea to add a dot suffix to the fully
// qualified class name. This makes caller localization to work
// properly even from classes that have almost the same fully
// qualified class name as SegLogger, e.g. MyLoggerTest.
static String FQCN = SegLogger.class.getName() + ".";
// It's enough to instantiate a factory once and for all.
private static SegLoggerFactory SegFactory = new SegLoggerFactory();
public SegLogger() {
super(new String ("Appender"));
}
public SegLogger (String pLogFile) {
super(new String ("Appender")); }
/**
This method overrides [EMAIL PROTECTED] Logger#getLogger} by supplying
its own factory type as a parameter.
*/
public static Logger getLogger(String pName) {
return Logger.getLogger(pName, SegFactory);
}
protected void debug (String pMessage) {
super.log( FQCN, Level.DEBUG, pMessage, null );
}
protected void info (String pMessage) {
super.log( FQCN, Level.INFO, pMessage, null );
}
protected void trace (String pMessage) {
super.log( FQCN, Level.TRACE, pMessage, null );
}
protected void warningLog (String pMessage) {
super.log( FQCN, Level.WARN, pMessage, null );
}
protected void error (String pMessage) {
super.log( FQCN, Level.ERROR, pMessage, null );
}
protected void fatal (String pMessage) {
super.log( FQCN, Level.FATAL, pMessage, null );
}
}
package Logica;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggerFactory;
/**
A factory that makes new [EMAIL PROTECTED] SegLogger} objects.
See <b><a href="doc-files/MyLoggerFactory.java">source
code</a></b> for more details.
@author ; */
public class SegLoggerFactory implements LoggerFactory {
/**
The constructor should be public as it will be called by
configurators in different packages. */
public SegLoggerFactory() {
}
public Logger makeNewLoggerInstance(String pName) {
return new SegLogger(pName);
I want to create a new log file for each user that uses the application
and that's why I'm using the KeyFileAppender class.
In the main method I write this:
SegLogger logger = (SegLogger) SegLogger.getLogger("Appender");
MDC.put("USER_ID", "usuario");
logger.debug(pInfo);
MDC.remove("USER_ID");
The thing is everything works fine on condition that in my
log4j.properties the rootLogger default Level is set at WARN AT LEAST
log4j.rootLogger=WARN, Appender
If I put (because I want to log INFO messages)
log4j.rootLogger=INFO, Appender
the application fails and tells me:
500 Internal Server Error
java.lang.NullPointerException
at Logica.KeyFileAppender.subAppend(KeyFileAppender.java:248)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at
org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:152)
at
org.apache.struts.util.PropertyMessageResources.<init>(PropertyMessageResources.java:127)
at
org.apache.struts.util.PropertyMessageResourcesFactory.createResources(PropertyMessageResourcesFactory.java:90)
at
org.apache.struts.util.MessageResources.getMessageResources(MessageResources.java:577)
at
org.apache.struts.action.ActionServlet.initInternal(ActionServlet.java:1329)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:464)
at javax.servlet.GenericServlet.init(GenericServlet.java:257)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpApplication.loadServlet(HttpApplication.java:2231)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpApplication.findServlet(HttpApplication.java:4617)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpApplication.findServlet(HttpApplication.java:4541)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpApplication.getRequestDispatcher(HttpApplication.java:2821)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:740)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at
oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at
oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:230)
at
oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:33)
at
oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:831)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0)
].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:298)
at java.lang.Thread.run(Thread.java:595)
because in the SubAppend method of the KeyFileAppender contextKeyValue
is null:
if((theWriter == null) && (contextKeyValue != null))
Any help would be highly appreciated
Thanks,
JON HAITZ
--
Jon Haitz Legarreta Gorroño
Laguntzaile zientifikoa / Colaborador científico / Scientific collaborator
VICOMTech - Visual Interaction and Communication Technologies Center
Mikeletegi Pasealekua, 57 - Parque Tecnológico
E-20009 Donostia - San Sebastián, Spain
Tel: +[34] 943 30 92 30
Fax: +[34] 943 30 93 93
e-mail: [EMAIL PROTECTED]
http://www.vicomtech.org
*** member of INI-GraphicsNet ****
http://www.inigraphics.net
*** member of IK4 Research Alliance ****
http://www.ik4.es
-----------------------------------------------------
VICOMTech is an ISO 9001:2000 certified institute
-----------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]