Merge pull request #1279 from jvz:updated-logging-docs
* pr/1279: Polish contribution Update logging documentation to include Log4j 2
This commit is contained in:
@@ -714,9 +714,9 @@ into logging calls to the SLF4J API, so if other libraries in your application u
|
|||||||
API, then you have a single place to configure and manage logging.
|
API, then you have a single place to configure and manage logging.
|
||||||
|
|
||||||
A common choice might be to bridge Spring to SLF4J, and then provide explicit binding
|
A common choice might be to bridge Spring to SLF4J, and then provide explicit binding
|
||||||
from SLF4J to Log4J. You need to supply 4 dependencies (and exclude the existing
|
from SLF4J to Log4j. You need to supply several dependencies (and exclude the existing
|
||||||
`commons-logging`): the bridge, the SLF4J API, the binding to Log4J, and the Log4J
|
`commons-logging`): the bridge, the SLF4J implementation for Log4j, and the Log4j
|
||||||
implementation itself. In Maven you would do that like this
|
implementation itself. In Maven you would do that like this:
|
||||||
|
|
||||||
[source,xml,indent=0]
|
[source,xml,indent=0]
|
||||||
[subs="verbatim,quotes,attributes"]
|
[subs="verbatim,quotes,attributes"]
|
||||||
@@ -736,22 +736,22 @@ implementation itself. In Maven you would do that like this
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>jcl-over-slf4j</artifactId>
|
<artifactId>jcl-over-slf4j</artifactId>
|
||||||
<version>1.5.8</version>
|
<version>1.7.22</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>log4j-slf4j-impl</artifactId>
|
||||||
<version>1.5.8</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>slf4j-log4j12</artifactId>
|
<artifactId>log4j-api</artifactId>
|
||||||
<version>1.5.8</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>1.2.14</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
----
|
----
|
||||||
@@ -771,47 +771,72 @@ Spring), because you only want one version of that API on the classpath.
|
|||||||
|
|
||||||
|
|
||||||
[[overview-logging-log4j]]
|
[[overview-logging-log4j]]
|
||||||
===== Using Log4J
|
===== Using Log4j
|
||||||
|
|
||||||
|
NOTE: Log4j 1.x is EOL and the following applies to Log4j 2
|
||||||
|
|
||||||
Many people use http://logging.apache.org/log4j[Log4j] as a logging framework for
|
Many people use http://logging.apache.org/log4j[Log4j] as a logging framework for
|
||||||
configuration and management purposes. It's efficient and well-established, and in fact
|
configuration and management purposes. It's efficient and well-established, and in fact
|
||||||
it's what we use at runtime when we build and test Spring. Spring also provides some
|
it's what we use at runtime when we build and test Spring. Spring also provides some
|
||||||
utilities for configuring and initializing Log4j, so it has an optional compile-time
|
utilities for configuring and initializing Log4j, so it has an optional compile-time
|
||||||
dependency on Log4j in some modules.
|
dependency on Log4j in some modules.
|
||||||
|
|
||||||
To make Log4j work with the default JCL dependency ( `commons-logging`) all you need to
|
To use Log4j with JCL, all you need to do is put Log4j on the classpath and provide
|
||||||
do is put Log4j on the classpath, and provide it with a configuration file (
|
it with a configuration file (`log4j2.xml`, `log4j2.properties`, or other
|
||||||
`log4j.properties` or `log4j.xml` in the root of the classpath). So for Maven users this
|
http://logging.apache.org/log4j/2.x/manual/configuration.html[supported configuration
|
||||||
is your dependency declaration:
|
formats]). For Maven users, the minimal dependencies needed are:
|
||||||
|
|
||||||
|
|
||||||
[source,xml,indent=0]
|
[source,xml,indent=0]
|
||||||
[subs="verbatim,quotes,attributes"]
|
[subs="verbatim,quotes,attributes"]
|
||||||
----
|
----
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>spring-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>{spring-version}</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>log4j-jcl</artifactId>
|
||||||
<version>1.2.14</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
----
|
----
|
||||||
|
|
||||||
And here's a sample log4j.properties for logging to the console:
|
If you also wish to use SLF4J, the following dependencies are also needed:
|
||||||
|
|
||||||
[literal]
|
[source,xml,indent=0]
|
||||||
[subs="verbatim,quotes"]
|
[subs="verbatim,quotes,attributes"]
|
||||||
|
----
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-slf4j-impl</artifactId>
|
||||||
|
<version>2.7</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
----
|
----
|
||||||
log4j.rootCategory=INFO, stdout
|
|
||||||
|
|
||||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
Here is an example `log4j2.xml` for logging to the console:
|
||||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
|
||||||
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
|
|
||||||
|
|
||||||
log4j.category.org.springframework.beans.factory=DEBUG
|
[source,xml,indent=0]
|
||||||
|
[subs="verbatim,quotes,attributes"]
|
||||||
|
----
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Configuration status="WARN">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="Console" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
|
||||||
|
</Console>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Logger name="org.springframework.beans.factory" level="DEBUG"/>
|
||||||
|
<Root level="error">
|
||||||
|
<AppenderRef ref="Console"/>
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
||||||
----
|
----
|
||||||
|
|
||||||
[[overview-native-jcl]]
|
[[overview-native-jcl]]
|
||||||
@@ -823,11 +848,11 @@ excluding `commons-logging` from your application is not enough in most situatio
|
|||||||
|
|
||||||
To be clear about this: the problems reported are usually not with JCL per se, or even
|
To be clear about this: the problems reported are usually not with JCL per se, or even
|
||||||
with `commons-logging`: rather they are to do with binding `commons-logging` to another
|
with `commons-logging`: rather they are to do with binding `commons-logging` to another
|
||||||
framework (often Log4J). This can fail because `commons-logging` changed the way they do
|
framework (often Log4j). This can fail because `commons-logging` changed the way they do
|
||||||
the runtime discovery in between the older versions (1.0) found in some containers and
|
the runtime discovery in between the older versions (1.0) found in some containers and
|
||||||
the modern versions that most people use now (1.1). Spring does not use any unusual
|
the modern versions that most people use now (1.1). Spring does not use any unusual
|
||||||
parts of the JCL API, so nothing breaks there, but as soon as Spring or your application
|
parts of the JCL API, so nothing breaks there, but as soon as Spring or your application
|
||||||
tries to do any logging you can find that the bindings to Log4J are not working.
|
tries to do any logging you can find that the bindings to Log4j are not working.
|
||||||
|
|
||||||
In such cases with WAS the easiest thing to do is to invert the class loader hierarchy
|
In such cases with WAS the easiest thing to do is to invert the class loader hierarchy
|
||||||
(IBM calls it "parent last") so that the application controls the JCL dependency, not
|
(IBM calls it "parent last") so that the application controls the JCL dependency, not
|
||||||
|
|||||||
Reference in New Issue
Block a user