What about static objects in the JVM? Would each Servlet get their own instance of X or will it get the static one?
If the Servlet spawned off threads? Then it should still work because you have not changed the TL. Does that sound right? I was just trying to mentally think what will happen when servlet 2 comes up. servlet1 sets the TL to "servlet1" servlet 1 creates an instance of X, say x1 while constructing x1, x1 reads TL, the read value is "servlet1" the constructor retrieves a logger whose name depends on the value of TL servlet 1 calls a method on x1, say foo() x1.foo() logs with that logger specific to the x1 servlet2 sets its TL to "servlet2" servlet2 creates an instance of X, say x2 while constructing x2, x2 reads TL, the read value is "servlet2" the constructor retrieves a logger whose name depends on the value of TL servlet2 calls a method on x2, say foo() x2.foo() logs with the logger specific to the x2 x1.foo() eventually returns servlet1 eventually returns, before returning it sets TL to null x2.foo() eventually returns servlet2 eventually returns, before returning it sets TL to null -----Original Message----- From: Ceki Gülcü [mailto:[EMAIL PROTECTED] Sent: Friday, June 11, 2004 3:09 PM To: Log4J Users List Subject: Re: Separate log file per servlet Do you have control over class X? If you do, then you use a ThreadLocal variable to set the servlet name from inside the servlet and retreive the name from class X. Assume the threadlocal variable is called TL. This is what will happen: servlet1 sets the TL to "servlet1" servlet 1 creates an instance of X, say x1 while constructing x1, x1 reads TL, the read value is "servlet1" the constructor retrieves a logger whose name depends on the value of TL servlet 1 calls a method on x1, say foo() x1.foo() logs with that logger specific to the x1 x1.foo() eventually returns servlet1 eventually returns, before returning it sets TL to null Make sense? At 07:06 PM 6/11/2004, you wrote: >The web server is configured to be one JVM for all the servlets. >Numerous people are developing different classes. We want each Servlet >to write to its own log. > >Class X >{ > ... > xLog = getLogger( "DEBUG" ); > ... > xLog.info( "message" ); > ... >} > >Class ServletY extends HttpServlet >{ > ... > xLog = getLogger( "DEBUG" ); > ... > configureAndWatch( ); > ... > xLog.info( "message" ); > ... > someMethod() > { > new X(); > } >} > >Class ServletZ extends HttpServlet >{ > ... > xLog = getLogger( "DEBUG" ); > ... > configureAndWatch( ); > ... > xLog.info( "message" ); > ... > someMethod() > { > new X(); > } > ... >} > >log4j.properties: > ... > Logger name="DEBUG" > Appender A > ... > Appender A > ... > >Class A extends DailyRollingFileAppender >{ > String _file = null; > > a( ) > { > super.init(); > setFile( "" ); > } > > setFile( aFile ) > { > // Throw stack trace to figure out which servlet called you > ... > // add path and .log to get filename like /tmp/ServletY.log or > // /tmp/ServletZ.log > _file = "newFile"; > } >} > >Now the problem: When the first servlet comes up, say ServletY, it >configures and creates /tmp/ServletY.log. ServletY and X write to the >file and everyone is happy. Now the next servlet comes up, say >ServletZ. It configures and creates /tmp/ServletX.log. Now everything >writes to this log but not the other. > >So I guess what I am looking for is how I can I do logging on a servlet >basis that writes to a particular log. The various support classes need >to call something generic because they do not know which specific >servlet called them. > >Thanks, >Adam > >[EMAIL PROTECTED] > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] -- Ceki Gülcü For log4j documentation consider "The complete log4j manual" ISBN: 2970036908 http://www.qos.ch/shop/products/clm_t.jsp --------------------------------------------------------------------- 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]