The only solution that comes to my mind if you want to set the property even 
before log4j is started is to set it through the java command as i mentioned in 
my earlier mail. However, if you want to set the property when your application 
is *getting deployed*, then there appears to be another way to do this. You can 
have a *startup servlet* in your application which will set this system 
property. Something like:
   
  web.xml:
  -------------
  <servlet>
  <servlet-name>MyConfigServlet</servlet-name>
  <servlet-class>org.myapp.MyConfigServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
   
  Then the code in your startup servlet(MyConfigServlet.java) would look like:
   
  public void init(ServletConfig config) throws ServletException {
        System.setProperty("myWebApp","somepath");
  }
   
  This would mean that when your application is being deployed the variable 
value will be set.
  Now, comes the tricky part. Since the log4j is already configured before 
coming to your servlet, the change to the myWebApp variable(which is refered in 
some appender) will have to be reflected to log4j.
  You can something like:
  Logger.getRootLogger().getLoggerRepository().resetConfiguration();
  This would tell log4j to configure itself again afresh and this time your 
myWebApp property is already set.
  So your startup servlet would ultimately look like:
   
  public void init(ServletConfig config) throws ServletException {
        System.setProperty("myWebApp","somepath");
        Logger.getRootLogger().getLoggerRepository().resetConfiguration();
  }
   
  This approach does have a drawback:
  - When you invoke the resetConfiguration() method some of the log files will 
get cleared(if the append is set to false on those appender configuration) and 
hence you will lose the previously logged data.
   
  regards,
  -Jaikiran
   
  

"[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote:
  Yes, this could be a solution I've already tried it, but I wonder whether is 
possible to set a SystemProperty before log4j is even loaded so that 
FileAppender.file=${myWebAppVariable}\${logfileName}

does make sense.

I'm just imagine a ClassLoader workaround but I can't see anything concrete.

> If you always deploy to the same location under the app server you
> could check if that is a property for the app server (i.e.
> catalina.home) that you could use as your base.
>
> On 7/24/06, [EMAIL PROTECTED] wrote:
> > Hi everyone,
> > I'd like that classes running in a web application would log to a file 
> > whose path is local to the absolute path where the web app is running. This 
> > means that, named ${myWebApp} my web application, I'd like to define the 
> > FileAppender file property to
> > ${myWebApp}'s absolute path . I've tried doing this by creating a 
> > ServletContextListener implementation and declaring in it a SystemProperty, 
> > but it doesnt work so far: i mean, it works but not the very first time 
> > that the web app rises, and this happens because class loader loads the 
> > log4j.jar before the ContextListener had called,I presume. Any hints are 
> > appreciated
> >
> > Ign Rome, Italy
> >
> >
> > ___________________________________________________________________
> > Conto Arancio al 4% fino a fine 2006 - Zero spese, soldi sempre 
> > disponibili. Aprilo subito
> > http://click.libero.it/ING
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> James Stauffer
> Are you good? Take the test at http://www.livingwaters.com/good/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> 


___________________________________________________________________
Conto Arancio al 4% fino a fine 2006 - Zero spese, soldi sempre disponibili. 
Aprilo subito
http://click.libero.it/ING



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



                                
---------------------------------
 Find out what India is talking about on Yahoo! Answers India.

Reply via email to