diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml
index 4d14c8a07d..a44df9699b 100644
--- a/spring-boot-dependencies/pom.xml
+++ b/spring-boot-dependencies/pom.xml
@@ -110,7 +110,6 @@
1.2
4.12
3.4.2
- 1.2.17
2.4.1
1.1.3
1.2.3
@@ -362,11 +361,6 @@
spring-boot-starter-undertow
1.4.0.BUILD-SNAPSHOT
-
- org.springframework.boot
- spring-boot-starter-log4j
- 1.4.0.BUILD-SNAPSHOT
-
org.springframework.boot
spring-boot-starter-log4j2
@@ -854,11 +848,6 @@
junit
${junit.version}
-
- log4j
- log4j
- ${log4j.version}
-
mysql
mysql-connector-java
diff --git a/spring-boot-docs/pom.xml b/spring-boot-docs/pom.xml
index a33396a2a9..30ea7fae87 100644
--- a/spring-boot-docs/pom.xml
+++ b/spring-boot-docs/pom.xml
@@ -177,11 +177,6 @@
junit
true
-
- log4j
- log4j
- true
-
net.sf.ehcache
ehcache
diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc
index 40188e50db..8e14623edc 100644
--- a/spring-boot-docs/src/main/asciidoc/howto.adoc
+++ b/spring-boot-docs/src/main/asciidoc/howto.adoc
@@ -1313,12 +1313,11 @@ You also need to add `logging.file` to your `application.properties`:
[[howto-configure-log4j-for-logging]]
=== Configure Log4j for logging
-Spring Boot also supports either http://logging.apache.org/log4j/1.2[Log4j] or
-http://logging.apache.org/log4j/2.x[Log4j 2] for logging configuration, but only if one
-of them is on the classpath. If you are using the starter poms for assembling
-dependencies that means you have to exclude Logback and then include your chosen version
-of Log4j instead. If you aren't using the starter poms then you need to provide
-`commons-logging` (at least) in addition to your chosen version of Log4j.
+Spring Boot supports http://logging.apache.org/log4j/2.x[Log4j 2] for logging
+configuration if it is on the classpath. If you are using the starter poms for
+assembling dependencies that means you have to exclude Logback and then include log4j 2
+instead. If you aren't using the starter poms then you need to provide `commons-logging`
+(at least) in addition to Log4j 2.
The simplest path is probably through the starter poms, even though it requires some
jiggling with excludes, .e.g. in Maven:
@@ -1341,17 +1340,14 @@ jiggling with excludes, .e.g. in Maven:
org.springframework.boot
- spring-boot-starter-log4j
+ spring-boot-starter-log4j2
----
-To use Log4j 2, simply depend on `spring-boot-starter-log4j2` rather than
-`spring-boot-starter-log4j`.
-
-NOTE: The use of one of the Log4j starters gathers together the dependencies for
-common logging requirements (e.g. including having Tomcat use `java.util.logging` but
-configuring the output using Log4j or Log4j 2). See the Actuator Log4j or Log4j 2
-samples for more detail and to see it in action.
+NOTE: The use of the Log4j starters gathers together the dependencies for common logging
+requirements (e.g. including having Tomcat use `java.util.logging` but configuring the
+output using Log4j 2). See the Actuator Log4j 2 samples for more detail and to see it in
+action.
diff --git a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
index 88ac4b9976..7aa7582164 100644
--- a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+++ b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
@@ -983,9 +983,9 @@ Spring Boot uses http://commons.apache.org/logging[Commons Logging] for all inte
logging, but leaves the underlying log implementation open. Default configurations are
provided for
http://docs.oracle.com/javase/7/docs/api/java/util/logging/package-summary.html[Java Util Logging],
-http://logging.apache.org/log4j/[Log4J], http://logging.apache.org/log4j/2.x/[Log4J2] and
-http://logback.qos.ch/[Logback]. In each case loggers are pre-configured to use console
-output with optional file output also available.
+http://logging.apache.org/log4j/2.x/[Log4J2] andhttp://logback.qos.ch/[Logback]. In each
+case loggers are pre-configured to use console output with optional file output also
+available.
By default, If you use the '`Starter POMs`', Logback will be used for logging. Appropriate
Logback routing is also included to ensure that dependent libraries that use
@@ -1182,9 +1182,6 @@ Depending on your logging system, the following files will be loaded:
|Logback
|`logback-spring.xml`, `logback-spring.groovy`, `logback.xml` or `logback.groovy`
-|Log4j
-|`log4j-spring.properties`, `log4j-spring.xml`, `log4j.properties` or `log4j.xml`
-
|Log4j2
|`log4j2-spring.xml` or `log4j2.xml`
diff --git a/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc b/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc
index e5224c16df..c2a414ea8b 100644
--- a/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc
+++ b/spring-boot-docs/src/main/asciidoc/using-spring-boot.adoc
@@ -517,8 +517,8 @@ swap specific technical facets.
|`spring-boot-starter-jetty`
|Imports the Jetty HTTP engine (to be used as an alternative to Tomcat).
-|`spring-boot-starter-log4j`
-|Support the Log4J logging framework.
+|`spring-boot-starter-log4j2`
+|Support the Log4J 2 logging framework.
|`spring-boot-starter-logging`
|Import Spring Boot's default logging framework (Logback).
diff --git a/spring-boot-parent/pom.xml b/spring-boot-parent/pom.xml
index d3e22d88c5..d8e0f41c6d 100755
--- a/spring-boot-parent/pom.xml
+++ b/spring-boot-parent/pom.xml
@@ -42,6 +42,11 @@
+
+ log4j
+ log4j
+ 1.2.17
+
com.google.guava
guava
diff --git a/spring-boot-samples/README.adoc b/spring-boot-samples/README.adoc
index d33ed22cd0..469eedb13e 100644
--- a/spring-boot-samples/README.adoc
+++ b/spring-boot-samples/README.adoc
@@ -14,8 +14,8 @@
-- A web UI example with production features
* link:spring-boot-sample-actuator-noweb[spring-boot-sample-actuator-noweb]
-- A production features sample with no web application
-* link:spring-boot-sample-actuator-log4j[spring-boot-sample-actuator-log4j]
- -- A production features sample using log4j for logging (instead of logback)
+* link:spring-boot-sample-actuator-log4j2[spring-boot-sample-actuator-log4j2]
+ -- A production features sample using log4j 2 for logging (instead of logback)
* link:spring-boot-sample-cache[spring-boot-sample-cache]
-- A web sample that uses Spring's cache abstraction
* link:spring-boot-sample-web-ui[spring-boot-sample-web-ui]
diff --git a/spring-boot-samples/pom.xml b/spring-boot-samples/pom.xml
index 156182549b..4e7446eb03 100644
--- a/spring-boot-samples/pom.xml
+++ b/spring-boot-samples/pom.xml
@@ -24,7 +24,6 @@
spring-boot-sample-ant
spring-boot-sample-activemq
spring-boot-sample-actuator
- spring-boot-sample-actuator-log4j
spring-boot-sample-actuator-log4j2
spring-boot-sample-actuator-noweb
spring-boot-sample-actuator-ui
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/pom.xml b/spring-boot-samples/spring-boot-sample-actuator-log4j/pom.xml
deleted file mode 100644
index 64a17e3e95..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- 4.0.0
-
-
- org.springframework.boot
- spring-boot-samples
- 1.4.0.BUILD-SNAPSHOT
-
- spring-boot-sample-actuator-log4j
- Spring Boot Actuator Log4j Sample
- Spring Boot Actuator Log4j Sample
- http://projects.spring.io/spring-boot/
-
- Pivotal Software, Inc.
- http://www.spring.io
-
-
- ${basedir}/../..
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
- org.springframework.boot
- spring-boot-starter-logging
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-log4j
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.boot
- spring-boot-starter-logging
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/HelloWorldService.java b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/HelloWorldService.java
deleted file mode 100644
index e7ba565979..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/HelloWorldService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2012-2013 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sample.actuator.log4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class HelloWorldService {
-
- @Autowired
- private ServiceProperties configuration;
-
- public String getHelloMessage() {
- return "Hello " + this.configuration.getName();
- }
-
-}
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleActuatorLog4JApplication.java b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleActuatorLog4JApplication.java
deleted file mode 100644
index 66c1edc98b..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleActuatorLog4JApplication.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2012-2013 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sample.actuator.log4j;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class SampleActuatorLog4JApplication {
-
- public static void main(String[] args) throws Exception {
- SpringApplication.run(SampleActuatorLog4JApplication.class, args);
- }
-
-}
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleController.java b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleController.java
deleted file mode 100644
index 43ea074981..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/SampleController.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2012-2013 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sample.actuator.log4j;
-
-import java.util.Collections;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-@Controller
-public class SampleController {
-
- @Autowired
- private HelloWorldService helloWorldService;
-
- @RequestMapping("/")
- @ResponseBody
- public Map helloWorld() {
- return Collections.singletonMap("message",
- this.helloWorldService.getHelloMessage());
- }
-
- @RequestMapping("/foo")
- @ResponseBody
- public String foo() {
- throw new IllegalArgumentException("Server error");
- }
-
-}
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/ServiceProperties.java b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/ServiceProperties.java
deleted file mode 100644
index 65194e1443..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/java/sample/actuator/log4j/ServiceProperties.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012-2014 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sample.actuator.log4j;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@ConfigurationProperties(prefix = "service", ignoreUnknownFields = false)
-@Component
-public class ServiceProperties {
-
- private String name = "World";
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
-}
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/application.properties b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/application.properties
deleted file mode 100644
index 68952c2ab7..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/application.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#logging.file: /tmp/logs/app.log
-#server.port: 8080
-#management.port: 8080
-management.address: 127.0.0.1
-endpoints.shutdown.enabled: true
-server.tomcat.basedir: target/tomcat
-server.tomcat.access_log_pattern: %h %t "%r" %s %b
-security.require_ssl: false
-service.name: Phil
-shell.ssh.enabled: true
-shell.ssh.port: 2222
-#shell.telnet.enabled: false
-#shell.telnet.port: 1111
-shell.auth: spring
-#shell.auth: key
-#shell.auth.key.path: ${user.home}/test/id_rsa.pub.pem
-#shell.auth: simple
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/log4j.properties b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/log4j.properties
deleted file mode 100644
index 6070be6142..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-log4j.rootCategory=INFO, CONSOLE
-
-PID=????
-LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] log4j%X{context} - ${PID} %5p [%t] --- %c{1}: %m%n
-
-# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}
-
-log4j.category.org.hibernate.validator.internal.util.Version=WARN
-log4j.category.org.apache.coyote.http11.Http11NioProtocol=WARN
-log4j.category.org.apache.tomcat.util.net.NioSelectorPool=WARN
-log4j.category.org.apache.catalina.startup.DigesterFactory=ERROR
diff --git a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/test/java/sample/actuator/log4j/SampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator-log4j/src/test/java/sample/actuator/log4j/SampleActuatorApplicationTests.java
deleted file mode 100644
index c02141e5d4..0000000000
--- a/spring-boot-samples/spring-boot-sample-actuator-log4j/src/test/java/sample/actuator/log4j/SampleActuatorApplicationTests.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2012-2014 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sample.actuator.log4j;
-
-import java.util.Map;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.SpringApplicationConfiguration;
-import org.springframework.boot.test.TestRestTemplate;
-import org.springframework.boot.test.WebIntegrationTest;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * Basic integration tests for service demo application.
- *
- * @author Dave Syer
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-@SpringApplicationConfiguration(SampleActuatorLog4JApplication.class)
-@WebIntegrationTest(randomPort = true)
-@DirtiesContext
-public class SampleActuatorApplicationTests {
-
- @Value("${local.server.port}")
- private int port;
-
- @Test
- public void testHome() throws Exception {
- @SuppressWarnings("rawtypes")
- ResponseEntity
- log4j
- log4j
- 1.2.17
+ org.apache.logging.log4j
+ log4j-api
+ 2.4.1
diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy
index f03bbb3a83..9d326f53cb 100644
--- a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy
+++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-exclude-group/verify.groovy
@@ -22,6 +22,6 @@ new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) {
@Override
protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception {
super.verifyZipEntries(verifier)
- verifier.assertHasNoEntryNameStartingWith("lib/log4j-1.2.17.jar")
+ verifier.assertHasNoEntryNameStartingWith("lib/log4j-api-2.4.1.jar")
}
}.verify();
diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml
index 994945fae5..d3ba2034a6 100644
--- a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml
+++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/pom.xml
@@ -52,9 +52,9 @@
provided
- log4j
- log4j
- @log4j.version@
+ org.apache.logging.log4j
+ log4j-api
+ 2.4.1
test
diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy
index b76415b150..1952298b0b 100644
--- a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy
+++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-test-scope/verify.groovy
@@ -22,6 +22,6 @@ new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) {
@Override
protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception {
super.verifyZipEntries(verifier)
- verifier.assertHasNoEntryNameStartingWith("lib/log4j-1.2.17.jar")
+ verifier.assertHasNoEntryNameStartingWith("lib/log4j-api-2.4.1.jar")
}
}.verify();
diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/pom.xml
index 3349f7ecd0..015944e662 100644
--- a/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/pom.xml
+++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/jar-with-unpack/pom.xml
@@ -57,9 +57,9 @@
provided
- log4j
- log4j
- @log4j.version@
+ org.apache.logging.log4j
+ log4j-api
+ @log4j2.version@
diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml
index 62394bd0e5..80d3cd142c 100644
--- a/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml
+++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/run-exclude/pom.xml
@@ -23,8 +23,8 @@
- log4j
- log4j
+ org.apache.logging.log4j
+ log4j-api
javax.servlet
@@ -36,9 +36,9 @@
- log4j
- log4j
- @log4j.version@
+ org.apache.logging.log4j
+ log4j-api
+ @log4j2.version@
javax.servlet
diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml
index 4a31e66a69..0de33cba3b 100644
--- a/spring-boot/pom.xml
+++ b/spring-boot/pom.xml
@@ -84,11 +84,6 @@
junit
true
-
- log4j
- log4j
- true
-
org.apache.logging.log4j
log4j-api
diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java
index 8bb9213836..bb63ed1749 100644
--- a/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java
+++ b/spring-boot/src/main/java/org/springframework/boot/logging/LoggingSystem.java
@@ -45,8 +45,6 @@ public abstract class LoggingSystem {
"org.springframework.boot.logging.logback.LogbackLoggingSystem");
systems.put("org.apache.logging.log4j.core.impl.Log4jContextFactory",
"org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");
- systems.put("org.apache.log4j.PropertyConfigurator",
- "org.springframework.boot.logging.log4j.Log4JLoggingSystem");
systems.put("java.util.logging.LogManager",
"org.springframework.boot.logging.java.JavaLoggingSystem");
SYSTEMS = Collections.unmodifiableMap(systems);
@@ -96,8 +94,7 @@ public abstract class LoggingSystem {
public abstract void setLogLevel(String loggerName, LogLevel level);
/**
- * Detect and return the logging system in use. Supports Logback, Log4J, Log4J2 and
- * Java Logging.
+ * Detect and return the logging system in use. Supports Logback and Java Logging.
* @param classLoader the classloader
* @return The logging system
*/
diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/log4j/Log4JLoggingSystem.java b/spring-boot/src/main/java/org/springframework/boot/logging/log4j/Log4JLoggingSystem.java
deleted file mode 100644
index cb6e954c91..0000000000
--- a/spring-boot/src/main/java/org/springframework/boot/logging/log4j/Log4JLoggingSystem.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2012-2015 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.boot.logging.log4j;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-
-import org.springframework.boot.logging.LogFile;
-import org.springframework.boot.logging.LogLevel;
-import org.springframework.boot.logging.LoggingInitializationContext;
-import org.springframework.boot.logging.LoggingSystem;
-import org.springframework.boot.logging.Slf4JLoggingSystem;
-import org.springframework.util.Assert;
-import org.springframework.util.Log4jConfigurer;
-import org.springframework.util.StringUtils;
-
-/**
- * {@link LoggingSystem} for Log4j.
- *
- * @author Phillip Webb
- * @author Dave Syer
- * @author Andy Wilkinson
- * @deprecated in Spring Boot 1.3 in favor of Apache Log4j 2 (following Apache's EOL
- * declaration for log4j 1.x)
- */
-@Deprecated
-public class Log4JLoggingSystem extends Slf4JLoggingSystem {
-
- private static final Map LEVELS;
-
- static {
- Map levels = new HashMap();
- levels.put(LogLevel.TRACE, Level.TRACE);
- levels.put(LogLevel.DEBUG, Level.DEBUG);
- levels.put(LogLevel.INFO, Level.INFO);
- levels.put(LogLevel.WARN, Level.WARN);
- levels.put(LogLevel.ERROR, Level.ERROR);
- levels.put(LogLevel.FATAL, Level.FATAL);
- levels.put(LogLevel.OFF, Level.OFF);
- LEVELS = Collections.unmodifiableMap(levels);
- }
-
- public Log4JLoggingSystem(ClassLoader classLoader) {
- super(classLoader);
- }
-
- @Override
- protected String[] getStandardConfigLocations() {
- return new String[] { "log4j.xml", "log4j.properties" };
- }
-
- @Override
- public void beforeInitialize() {
- super.beforeInitialize();
- LogManager.getRootLogger().setLevel(Level.FATAL);
- }
-
- @Override
- protected void loadDefaults(LoggingInitializationContext initializationContext,
- LogFile logFile) {
- if (logFile != null) {
- loadConfiguration(getPackagedConfigFile("log4j-file.properties"), logFile);
- }
- else {
- loadConfiguration(getPackagedConfigFile("log4j.properties"), logFile);
- }
- }
-
- @Override
- protected void loadConfiguration(LoggingInitializationContext initializationContext,
- String location, LogFile logFile) {
- loadConfiguration(location, logFile);
- }
-
- protected void loadConfiguration(String location, LogFile logFile) {
- Assert.notNull(location, "Location must not be null");
- if (logFile != null) {
- logFile.applyToSystemProperties();
- }
- try {
- Log4jConfigurer.initLogging(location);
- }
- catch (Exception ex) {
- throw new IllegalStateException(
- "Could not initialize Log4J logging from " + location, ex);
- }
- }
-
- @Override
- protected void reinitialize(LoggingInitializationContext initializationContext) {
- loadConfiguration(getSelfInitializationConfig(), null);
- }
-
- @Override
- public void setLogLevel(String loggerName, LogLevel level) {
- Logger logger = (StringUtils.hasLength(loggerName)
- ? LogManager.getLogger(loggerName) : LogManager.getRootLogger());
- logger.setLevel(LEVELS.get(level));
- }
-
- @Override
- public Runnable getShutdownHandler() {
- return new ShutdownHandler();
- }
-
- private static final class ShutdownHandler implements Runnable {
-
- @Override
- public void run() {
- LogManager.shutdown();
- }
-
- }
-
-}
diff --git a/spring-boot/src/main/java/org/springframework/boot/logging/log4j/package-info.java b/spring-boot/src/main/java/org/springframework/boot/logging/log4j/package-info.java
deleted file mode 100644
index d5a91c83d5..0000000000
--- a/spring-boot/src/main/java/org/springframework/boot/logging/log4j/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2012-2014 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Support for the Log4j logging library.
- */
-package org.springframework.boot.logging.log4j;
diff --git a/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j-file.properties b/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j-file.properties
deleted file mode 100644
index 5242f3d128..0000000000
--- a/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j-file.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-log4j.rootCategory=INFO, CONSOLE, FILE
-
-PID=????
-LOG_PATH=${java.io.tmpdir}
-LOG_FILE=${LOG_PATH}/spring.log
-LOG_LEVEL_PATTERN=%5p
-LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] boot%X{context} - ${PID} ${LOG_LEVEL_PATTERN} [%t] --- %c{1}: %m%n
-
-# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}
-
-log4j.appender.FILE=org.apache.log4j.RollingFileAppender
-log4j.appender.FILE.File=${LOG_FILE}
-log4j.appender.FILE.MaxFileSize=10MB
-log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
-log4j.appender.FILE.layout.ConversionPattern=${LOG_PATTERN}
-
-log4j.category.org.apache.catalina.startup.DigesterFactory=ERROR
-log4j.category.org.apache.catalina.util.LifecycleBase=ERROR
-log4j.category.org.apache.coyote.http11.Http11NioProtocol=WARN
-log4j.category.org.apache.sshd.common.util.SecurityUtils
-log4j.category.org.apache.tomcat.util.net.NioSelectorPool=WARN
-log4j.category.org.crsh.plugin=WARN
-log4j.category.org.crsh.ssh=WARN
-log4j.category.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
-log4j.category.org.hibernate.validator.internal.util.Version=WARN
-log4j.category.org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration=WARN
-log4j.category.org.springframework.boot.actuate.endpoint.jmx=WARN
-log4j.category.org.thymeleaf=WARN
-
diff --git a/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j.properties b/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j.properties
deleted file mode 100644
index a8769ee7a9..0000000000
--- a/spring-boot/src/main/resources/org/springframework/boot/logging/log4j/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-log4j.rootCategory=INFO, CONSOLE
-
-PID=????
-LOG_LEVEL_PATTERN=%5p
-LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] boot%X{context} - ${PID} ${LOG_LEVEL_PATTERN} [%t] --- %c{1}: %m%n
-
-# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}
-
-log4j.category.org.apache.catalina.startup.DigesterFactory=ERROR
-log4j.category.org.apache.catalina.util.LifecycleBase=ERROR
-log4j.category.org.apache.coyote.http11.Http11NioProtocol=WARN
-log4j.category.org.apache.sshd.common.util.SecurityUtils
-log4j.category.org.apache.tomcat.util.net.NioSelectorPool=WARN
-log4j.category.org.crsh.plugin=WARN
-log4j.category.org.crsh.ssh=WARN
-log4j.category.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
-log4j.category.org.hibernate.validator.internal.util.Version=WARN
-log4j.category.org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration=WARN
-log4j.category.org.springframework.boot.actuate.endpoint.jmx=WARN
-log4j.category.org.thymeleaf=WARN
diff --git a/spring-boot/src/test/java/org/springframework/boot/logging/log4j/Log4JLoggingSystemTests.java b/spring-boot/src/test/java/org/springframework/boot/logging/log4j/Log4JLoggingSystemTests.java
deleted file mode 100644
index 3fe02c4612..0000000000
--- a/spring-boot/src/test/java/org/springframework/boot/logging/log4j/Log4JLoggingSystemTests.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2012-2015 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.boot.logging.log4j;
-
-import java.io.File;
-import java.util.logging.Handler;
-import java.util.logging.LogManager;
-
-import org.apache.commons.logging.impl.Log4JLogger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.slf4j.bridge.SLF4JBridgeHandler;
-
-import org.springframework.boot.logging.AbstractLoggingSystemTests;
-import org.springframework.boot.logging.LogLevel;
-import org.springframework.boot.test.OutputCapture;
-import org.springframework.util.StringUtils;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-/**
- * Tests for {@link Log4JLoggingSystem}.
- *
- * @author Phillip Webb
- * @author Andy Wilkinson
- */
-@SuppressWarnings("deprecation")
-public class Log4JLoggingSystemTests extends AbstractLoggingSystemTests {
-
- @Rule
- public OutputCapture output = new OutputCapture();
-
- private final Log4JLoggingSystem loggingSystem = new Log4JLoggingSystem(
- getClass().getClassLoader());
-
- private Log4JLogger logger;
-
- @Before
- public void setup() {
- this.logger = new Log4JLogger(getClass().getName());
- }
-
- @Override
- @After
- public void clear() {
- this.loggingSystem.cleanUp();
- }
-
- @Test
- public void noFile() throws Exception {
- this.loggingSystem.beforeInitialize();
- this.logger.info("Hidden");
- this.loggingSystem.initialize(null, null, null);
- this.logger.info("Hello world");
- String output = this.output.toString().trim();
- assertTrue("Wrong output:\n" + output, output.contains("Hello world"));
- assertFalse("Output not hidden:\n" + output, output.contains("Hidden"));
- assertFalse(new File(tmpDir() + "/spring.log").exists());
- }
-
- @Test
- public void withFile() throws Exception {
- this.loggingSystem.beforeInitialize();
- this.logger.info("Hidden");
- this.loggingSystem.initialize(null, null, getLogFile(null, tmpDir()));
- this.logger.info("Hello world");
- String output = this.output.toString().trim();
- assertTrue("Wrong output:\n" + output, output.contains("Hello world"));
- assertFalse("Output not hidden:\n" + output, output.contains("Hidden"));
- assertTrue(new File(tmpDir() + "/spring.log").exists());
- }
-
- @Test
- public void testNonDefaultConfigLocation() throws Exception {
- this.loggingSystem.beforeInitialize();
- this.loggingSystem.initialize(null, "classpath:log4j-nondefault.properties",
- getLogFile(null, tmpDir()));
- this.logger.info("Hello world");
- String output = this.output.toString().trim();
- assertTrue("Wrong output:\n" + output, output.contains("Hello world"));
- assertTrue("Wrong output:\n" + output, output.contains(tmpDir() + "/spring.log"));
- assertFalse(new File(tmpDir() + "/tmp.log").exists());
- }
-
- @Test(expected = IllegalStateException.class)
- public void testNonexistentConfigLocation() throws Exception {
- this.loggingSystem.beforeInitialize();
- this.loggingSystem.initialize(null, "classpath:log4j-nonexistent.xml", null);
- }
-
- @Test
- public void setLevel() throws Exception {
- this.loggingSystem.beforeInitialize();
- this.loggingSystem.initialize(null, null, null);
- this.logger.debug("Hello");
- this.loggingSystem.setLogLevel("org.springframework.boot", LogLevel.DEBUG);
- this.logger.debug("Hello");
- assertThat(StringUtils.countOccurrencesOf(this.output.toString(), "Hello"),
- equalTo(1));
- }
-
- @Test
- @Ignore("Fails on Bamboo")
- public void loggingThatUsesJulIsCaptured() {
- this.loggingSystem.beforeInitialize();
- this.loggingSystem.initialize(null, null, null);
- java.util.logging.Logger julLogger = java.util.logging.Logger
- .getLogger(getClass().getName());
- julLogger.severe("Hello world");
- String output = this.output.toString().trim();
- assertTrue("Wrong output:\n" + output, output.contains("Hello world"));
- }
-
- @Test
- public void bridgeHandlerLifecycle() {
- assertFalse(bridgeHandlerInstalled());
- this.loggingSystem.beforeInitialize();
- assertTrue(bridgeHandlerInstalled());
- this.loggingSystem.cleanUp();
- assertFalse(bridgeHandlerInstalled());
- }
-
- private boolean bridgeHandlerInstalled() {
- java.util.logging.Logger rootLogger = LogManager.getLogManager().getLogger("");
- Handler[] handlers = rootLogger.getHandlers();
- for (Handler handler : handlers) {
- if (handler instanceof SLF4JBridgeHandler) {
- return true;
- }
- }
- return false;
- }
-
-}
diff --git a/spring-boot/src/test/resources/log4j-nondefault.properties b/spring-boot/src/test/resources/log4j-nondefault.properties
deleted file mode 100644
index d852ca65d8..0000000000
--- a/spring-boot/src/test/resources/log4j-nondefault.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-log4j.reset=true
-log4j.rootCategory=INFO, CONSOLE
-
-PID=????
-LOG_PATTERN=${LOG_FILE} %d{yyyy-MM-dd HH:mm:ss.SSS}] service%X{context} - ${PID} %5p [%t] --- %c{1}: %m%n
-
-# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}