You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by David Schultz <ds...@atstransportation.com> on 2001/10/01 22:08:40 UTC

PropertyConfigurator.configure method in J2EE

If I understand the documentation and discussion threads properly, the
configure method of the PropertyConfigurator class should only be called
once be JVM.  (Multiple calls result in multiple occurences of output data
in the logs.)

So, when using a J2EE server, where is the appropriate place for putting the
configure call?

(From the documentation, it is clear how to setup the Tomcat servlet engine
to only configure once.  A program with a main() is obvious.  However, about
the only thing I have seen for J2EE is to have a stateless session bean for
performing the configure.  I guess this would be something done by an
administrator once the server was brought up.  However, it seems like there
should be a cleaner way.)

On a related note, I don't see people talking about the shutdown method of
the Category class.  Are people just assuming that is okay to let an
application terminate without closing any open output streams?  Again, with
a main() this is obvious.  Although this doesn't seem to be discussed for
Tomcat or J2EE servers.

David W. Schultz
AT&S Transportation, LLC: (704) 529-6300 x 125


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org


Re: PropertyConfigurator.configure method in J2EE

Posted by Eddie <po...@hotmail.com>.
Define a init servlet/jsp  as "load-on-startup"  (see the web.xml spec) per
J2EE application.  Use the init servlet to configure the log properties. If
another application does the same thing.., Swauu... it doesn't matter. At
least in this way you are sure that all the applications are independent and
the log4j engine is correctly configured.
Works fine for me.

Eddie


----- Original Message -----
From: "David Schultz" <ds...@atstransportation.com>
To: <lo...@jakarta.apache.org>
Sent: Monday, October 01, 2001 10:08 PM
Subject: PropertyConfigurator.configure method in J2EE


> If I understand the documentation and discussion threads properly, the
> configure method of the PropertyConfigurator class should only be called
> once be JVM.  (Multiple calls result in multiple occurences of output data
> in the logs.)
>
> So, when using a J2EE server, where is the appropriate place for putting
the
> configure call?
>
> (From the documentation, it is clear how to setup the Tomcat servlet
engine
> to only configure once.  A program with a main() is obvious.  However,
about
> the only thing I have seen for J2EE is to have a stateless session bean
for
> performing the configure.  I guess this would be something done by an
> administrator once the server was brought up.  However, it seems like
there
> should be a cleaner way.)
>
> On a related note, I don't see people talking about the shutdown method of
> the Category class.  Are people just assuming that is okay to let an
> application terminate without closing any open output streams?  Again,
with
> a main() this is obvious.  Although this doesn't seem to be discussed for
> Tomcat or J2EE servers.
>
> David W. Schultz
> AT&S Transportation, LLC: (704) 529-6300 x 125
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: log4j-user-help@jakarta.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org


RE: PropertyConfigurator.configure method in J2EE

Posted by David Schultz <ds...@atstransportation.com>.
So, I'm running into some problems where the recommendations for using Log4J
clash with the J2EE spec.  Before I begin, thanks for the clarification
about multiple calls to the PropertyConfigurator.configure method.

Here we go...

1) Defining beans that load at Application Server initialization time.

This seems to vendor specific piece of functionality.  (Now, the J2EE spec
is pretty big, and EJB 1.1 is even bigger.  So, I'm open to the possibility
that I've missed this in the spec.  If someone knows where the spec requires
that a server be able to instantiate a bean at startup, please pass this
info along.  I'm afraid that you'll have to quote from the spec on this one.
Just saying it works fine in your server isn't going to cut it.)

Even if this supported, the App server (more specifically, the EJB
Container) is allowed to distribute instance of beans across multiple JVM's
within an Application.  So, there is no guarantee that the JVM which
instantiated my startup bean (to call PropertyConfigurator.configure) is the
same JVM where my other bean will do a Category.getInstance(...).  So, I
might not be configured in each JVM.

2)  Writing to a file specified in the properties file
Again the multiple JVM's really wreak havoc.  The properties file contains
this info at the class level.  So, instances of my class in different JVM's
(remember they are all part of the same J2EE application and will see the
same properties file) will be attempting to write to the same place
(unsynchronized between the JVMs).

Not to mention that beans "must not use the java.io package to attempt to
access files and directories in the file system".  (EJB Specification, v1.1,
Sun Microsystems, Pg273)

[Does this mean that the only way to reliably log in a J2EE environment is
to send log info down a socket to some listener who is assembling all the
info for the application?]

3)  Using the Runtime.addShutdownHook method to cleanup/close Appenders
Wouldn't this violate the EJB1.1 edict against trying to manage threads?

4)  properties file
Wouldn't reading from the properties file also violate the java.io
restriction?

Maybe this all points to only being able to use Log4J in a very specific way
inside J2EE (or maybe it just means I missed something terribly important at
a very basic level).  In any event, I think some clarification will be
useful to all.

Dave

-----Original Message-----
From: Ceki Gülcü [mailto:cgu@qos.ch]
Sent: Tuesday, 02.October 2001 02:50
To: LOG4J Users Mailing List
Subject: Re: PropertyConfigurator.configure method in J2EE


At 16:08 01.10.2001 -0400, David Schultz wrote:
>If I understand the documentation and discussion threads properly, the
>configure method of the PropertyConfigurator class should only be called
>once be JVM.  (Multiple calls result in multiple occurences of output data
>in the logs.)

That is not entirely correct. If a configuration file is reloaded, then any
category mentioned in the config file will have its appenders closed and
removed. The duplication will not occur.

>So, when using a J2EE server, where is the appropriate place for putting
the
>configure call?

Can't you define beans that are loaded at Aplicication Server initialization
time?

>(From the documentation, it is clear how to setup the Tomcat servlet engine
>to only configure once.  A program with a main() is obvious.  However,
about
>the only thing I have seen for J2EE is to have a stateless session bean for
>performing the configure.  I guess this would be something done by an
>administrator once the server was brought up.  However, it seems like there
>should be a cleaner way.)
>
>On a related note, I don't see people talking about the shutdown method of
>the Category class.  Are people just assuming that is okay to let an
>application terminate without closing any open output streams?  Again, with
>a main() this is obvious.  Although this doesn't seem to be discussed for
>Tomcat or J2EE servers.

You can use JDK 1.3 shutdown hooks. See Runtime.addShutdownHook(Thread) for
more details.


--
Ceki Gülcü - http://qos.ch



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org


Re: PropertyConfigurator.configure method in J2EE

Posted by Ceki Gülcü <cg...@qos.ch>.
At 16:08 01.10.2001 -0400, David Schultz wrote:
>If I understand the documentation and discussion threads properly, the
>configure method of the PropertyConfigurator class should only be called
>once be JVM.  (Multiple calls result in multiple occurences of output data
>in the logs.)

That is not entirely correct. If a configuration file is reloaded, then any category mentioned in the config file will have its appenders closed and removed. The duplication will not occur.

>So, when using a J2EE server, where is the appropriate place for putting the
>configure call?

Can't you define beans that are loaded at Aplicication Server initialization time?

>(From the documentation, it is clear how to setup the Tomcat servlet engine
>to only configure once.  A program with a main() is obvious.  However, about
>the only thing I have seen for J2EE is to have a stateless session bean for
>performing the configure.  I guess this would be something done by an
>administrator once the server was brought up.  However, it seems like there
>should be a cleaner way.)
>
>On a related note, I don't see people talking about the shutdown method of
>the Category class.  Are people just assuming that is okay to let an
>application terminate without closing any open output streams?  Again, with
>a main() this is obvious.  Although this doesn't seem to be discussed for
>Tomcat or J2EE servers.

You can use JDK 1.3 shutdown hooks. See Runtime.addShutdownHook(Thread) for more details.


--
Ceki Gülcü - http://qos.ch



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org