jacob,
thanks for your advice. as you seem to be expert on servlets maybe you can tell
me what you think of the way i used to handle my logs when i was doing servlets
under jboss (it's been more than a year ago, so this all may be a little
inaccurate):
1. i have 2 system properties: log-path and conf-path both pointing to
subdirectories in the jboss directory
2. in contextInitialized() i load my log4j properties with
PropertyConfigurator.configure(confPath + projectName + "/log4j.properties")
3. in the log4j.properties files i set the files to
${log-path}/projectName/servlet.log
4. from my servlets i can reload the whole thing if some special URL is called
(..&reloadLog4j=mySecretPWD&...)
the advantages of this system is that
- i can reconfigure the logging "on-the-fly" without redeploying or restarting
the servlet and/or app server
- it works on all jboss versions (e.g. the different classloading strategies)
and also if log4j.jar is in a central possition
- i get all my logs into a directory which can be "served" by apache (to
authorized users)
any comments?
cheers
patrick
> -----Ursprüngliche Nachricht-----
> Von: Jacob Kjome [mailto:[EMAIL PROTECTED]
> Gesendet: Dienstag, 26. Dezember 2006 18:28
> An: Log4J Users List
> Betreff: Re: Loading sequence of log4j
>
>
>
> Don't use a init servlet. The servlet spec makes no guarantee as to
> when the servlet initialization will happen. It may or may not be at
> container startup. Use a serlvet context listener. It has methods
> that are guaranteed to be called at application startup and
> application shutdown. Here's what I suggest...
>
> Assuming you are using Tomcat...
>
> 1. Put log4j.jar in WEB-INF/lib and a dummy Log4j config file (see
> below) in WEB-INF/classes. The dummy config file is meant to cover
> for autoconfiguration if it runs before your manual configuration
> runs, avoiding various bogus logging, warning messages from Log4j, or
> other errors.
>
> 2. Put your real config file under WEB-INF, but not in
> WEB-INF/classes
>
> 3. Implement a servlet context listener and implement the
> contextInitialized() method (off the top of my head, I think that's
> what it is called). Set you system property first and then manually
> configure log4j, pointing it to your real config file
> somewhere under WEB-INF.
>
> BTW, I don't recommend logging to a directory directly under the
> application directory. The servlet spec makes no guarantee that you
> have write access to the file system other than the provided
> System.getProperty("java.io.temp") directory. I suggest you set the
> system property via the command line using a -D parameter when you
> start up the appserver. With Tomcat, you can provide this in the
> CATALINA_OPTS system property...
>
> CATALINA_OPTS=-Dadmin-console-abs-home=/my/path/to/logs
>
> If you do this, you can bypass the dummy Log4j config file and skip
> manual initialization. Just put your real config file in
> WEB-INF/classes and let Log4j auto-configure itself, since the system
> property is now guaranteed to be there before Log4j
> initializes itself.
>
>
>
> Here's an example of a dummy Log4j config file to suppress Log4j
> errors until you perform your manual initialization......
>
> <?xml version="1.0" encoding="UTF-8" ?>
> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
>
> <!-- This file is meant to satisfy/supress auto-configuration of the
> default logger repository
> when log4j.jar is included in WEB-INF/lib. This assumes that
> manual configuration will be
> performed later, usually on a non-default logger repository as
> specified by a repository selector.
> The purpose of supression is to avoid Log4j auto-configuration
> finding a Log4j config file in a
> parent classloader when it can't find one locally, which can
> lead to either bogus
> (but generally harmless) configuration of the default
> repository or even a nasty stacktrace
> if an incompatible Log4j config file is found (such as when
> using Log4j-1.2.x in WEB-INF/lib
> and Log4j-1.3 in the server's classpath. The XML formats are
> generally incompatible!).
> This file should be copied to WEB-INF/classes as "log4j.xml"
> when building the .war file. -->
> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
> debug="false" threshold="debug">
> <root>
> <level value="off"/>
> </root>
> </log4j:configuration>
>
>
> Jake
>
> At 03:02 AM 12/26/2006, you wrote:
> >Hi all
> >
> >I have this start up servlet that does the initializing some system
> >parameters.
> >
> > <load-on-startup>1</load-on-startup>
> >And i place this servlet on the first priority
> >
> >In the servlet i have something..
> >System.setProperty("admin-console-abs-home",
>
> >getServletContext().getRealPath("")+getServletConfig().getIni
> tParamete
> >r("adminConsoleLog"));
> >
> >So the log4j.xml uses something like
> ><param name="File" value="${admin-console-abs-home}"/>
> >
> >Sometimes the Start up servlet runs first and initalize the
> property. But at
> >times log4j starts first and giving an error
> >log4j:ERROR setFile(null,true) call failed.
> >
> >So how can i ensure that log4j initalizes only after my
> start up servlet
> >finishes initalizing?
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]