Re: How is the search path for "log4j.properties" file?
On 8/18/2010 10:15 AM, Llyod Altman wrote:
Assume a java program declares and uses a log4j logger.
How is the search path for the responsible log4j.properties file resp.
how is the priority if multiple log4j.properties files exist?
I can think of different levels:
log4j.properties file in the directory where the calling *.class/*.jar is placed
log4j.properties file in the directory where the log4j.jar is placed
log4j.properties file in the directory where the java.exe is placed
log4j.properties file in a special config directory (of the appserver)
log4j.properties file in the directory on the PATH environment variable
Default Initialization Procedure
The log4j library does not make any assumptions about its environment.
In particular, there are no default log4j appenders. Under certain
well-defined circumstances however, the static inializer of the Logger
class will attempt to automatically configure log4j. The Java language
guarantees that the static initializer of a class is called once and
only once during the loading of a class into memory. It is important to
remember that different classloaders may load distinct copies of the
same class. These copies of the same class are considered as totally
unrelated by the JVM.
The default initialization is very useful in environments where the
exact entry point to the application depends on the runtime environment.
For example, the same application can be used as a stand-alone
application, as an applet, or as a servlet under the control of a
The exact default initialization algorithm is defined as follows:
1. Setting the log4j.defaultInitOverride system property to any
other value then "false" will cause log4j to skip the default
initialization procedure (this procedure).
2. Set the resource string variable to the value of the
log4j.configuration system property. The preferred way to specify the
default initialization file is through the log4j.configuration system
property. In case the system property log4j.configuration is not
defined, then set the string variable resource to its default value
3. Attempt to convert the resource variable to a URL.
4. If the resource variable cannot be converted to a URL, for
example due to a MalformedURLException, then search for the resource
from the classpath by calling
which returns a URL. Note that the string "log4j.properties" constitutes
a malformed URL. See Loader.getResource(java.lang.String) for the list
of searched locations.
5. If no URL could not be found, abort default initialization.
Otherwise, configure log4j from the URL. The PropertyConfigurator will
be used to parse the URL to configure log4j unless the URL ends with the
".xml" extension, in which case the DOMConfigurator will be used. You
can optionaly specify a custom configurator. The value of the
log4j.configuratorClass system property is taken as the fully qualified
class name of your custom configurator. The custom configurator you
specify must implement the Configurator interface.