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]

Reply via email to