Issue
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.
Solution
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/
Answered By - Harsh Mishra
Answer Checked By - Willingham (JavaFixing Volunteer)