Reputation: 75
I am trying to use Apache Log4j 2.12.1 with Spring Boot 2.2.1 but when I run, it doesn't give any warning about missing log4j 2 configuration file. Below is the code for logging(Simple once class to test if it works or note):
package com.example.Log4jdemoSpringboot;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Log4jDemoSpringBootApplication {
static Logger logger = LogManager.getLogger(Log4jDemoSpringBootApplication.class);
public static void main(String[] args) {
SpringApplication.run(Log4jDemoSpringBootApplication.class, args);
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.debug("debug");
logger.fatal("fatal");
}
}
and Below is the output:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.1.RELEASE)
2019-11-18 12:19:20.844 INFO 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : Starting Log4jDemoSpringBootApplication on Gurpreet-PC with PID 13136 (C:\Development\eclipse-workspace\Log4j-demo-Spring-boot\target\classes started by Gurpreet in C:\Development\eclipse-workspace\Log4j-demo-Spring-boot)
2019-11-18 12:19:20.872 INFO 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : No active profile set, falling back to default profiles: default
2019-11-18 12:19:26.946 INFO 13136 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-11-18 12:19:27.009 INFO 13136 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-11-18 12:19:27.011 INFO 13136 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-11-18 12:19:27.442 INFO 13136 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-11-18 12:19:27.444 INFO 13136 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 6320 ms
2019-11-18 12:19:28.213 INFO 13136 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-11-18 12:19:28.925 INFO 13136 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-11-18 12:19:28.937 INFO 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : Started Log4jDemoSpringBootApplication in 10.398 seconds (JVM running for 13.269)
2019-11-18 12:19:28.945 INFO 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : info
2019-11-18 12:19:28.949 WARN 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : warn
2019-11-18 12:19:28.952 ERROR 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : error
2019-11-18 12:19:28.953 ERROR 13136 --- [ main] c.e.L.Log4jDemoSpringBootApplication : fatal
However if I use same configuration with simple java projects, it works.
Upvotes: 5
Views: 12203
Reputation: 1
This issue also really annoyed me but solution is close enough: Spring by default using Logback and if you want to use Log4J2 or other loggers first you need to exclude logback from Spring library in Maven and add to resource folder "log4J2.xml" configuration file. You can find instruction here on step 5 - https://www.baeldung.com/spring-boot-logging
Upvotes: 0
Reputation: 91
Just sharing as I also faced the same issue with my log4j2 configuration. I got the following solution.
Run command: mvn dependency:tree This command will tell you which dependencies are loading before your configuration.
Adding exclusions to the dependency in pom.xml loading before your log dependency, add either of the following mine worked with the option a.
a-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
b-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
After this all worked well and my log4j2.xml configuration loaded successfully. Make sure the configuration file is in the classpath.
Upvotes: 7
Reputation: 377
I had the issue, spring boot didn't search the configuration xml file. I added this line to application.properties (log4j2.xml is in src/main/resources)
logging.config=classpath:log4j2.xml
Upvotes: 9
Reputation: 2135
Hope this is what are looking for
This is something that I have used in Spring boot logging
In application.properties
#logging.level.root=WARN
logging.level.org.springframework=DEBUG
logging.level.com.appicantion.name=DEBUG
#output to a temp_folder/file
logging.file=${java.io.tmpdir}/application.log
# Logging pattern for the console
logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss} - %msg%n
# Logging pattern for file
logging.pattern.file= %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%
Your Answer : In log4j2
add log4j2.xml in src/main/resources folder.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
<Property name="APP_LOG_ROOT">c:/temp</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}" />
</Console>
<RollingFile name="appLog"
fileName="${APP_LOG_ROOT}/SpringBoot2App/application.log"
filePattern="${APP_LOG_ROOT}/SpringBoot2App/application-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}" />
<Policies>
<SizeBasedTriggeringPolicy size="19500KB" />
</Policies>
<DefaultRolloverStrategy max="1" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.application.app" additivity="false">
<AppenderRef ref="appLog" />
<AppenderRef ref="Console" />
</Logger>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
https://howtodoinjava.com/spring-boot2/logging/spring-boot-log4j2-config/
Upvotes: 3