I am having a Maven project with a few different modules (a core module and some other modules dealing various functionalities) for which I would like to set different logging levels using log4j2 (ex: for core module I would like to have detailed logs (DEBUG) but for the other ones I would like to keep a minimum set of logs (INFO)).
Here is how the project structure looks like:
project
+- root
+- pom.xml
+- module-core
| +- pom.xml
| +- src
| | +- main
| | +- java
| | +- resources
| | +- test
| | +- java
| +- target
+- module-A
| +- pom.xml
| +- src
| | +- main
| | +- java
| | +- test
| | +- java
| +- target
+- module-B
| +- pom.xml
| +- src
| | +- main
| | +- java
| | +- test
| | +- java
| +- target
Log4j2 dependencies are placed in the root pom.xml file and log4j2.xml
is placed into module-core
under resources folder.
Would it be possible to customize and specify desired logging levels into the above log4j2.xml
file?
Here is the log4j2.xml content:
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<property name="filters">org.openqa,org.apache.maven,sun.reflect,java.lang.reflect,java.utils,org.testng</property>
<property name="logMsgPattern">%highlight{%-5p | %d{HH:mm:ss} |} (%F:%L) %highlight{| %M ||} %m%n%xEx{filters(${filters})}</property>
</properties>
<Appenders>
<File name="FILE" fileName="target/logs/logfile.log" append="true">
<PatternLayout pattern="%-5p | %d{HH:mm:ss} | (%F:%L) | %M - %m%n"/>
</File>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%highlight{%-5p | %d{HH:mm:ss:fff} |} (%F:%L) %highlight{| %M ||} %m%n%xEx{filters(${filters})}"/>
</Console>
</Appenders>
<Loggers>
<Root level="INFO" additivity="false">
<AppenderRef level="INFO" ref="CONSOLE" />
</Root>
<Logger name="module-core.*" level="DEBUG" additivity="false">
<AppenderRef level="DEBUG" ref="CONSOLE" />
</Logger>
<Logger name="module-A.*" level="INFO" additivity="false">
<AppenderRef level="INFO" ref="CONSOLE" />
</Logger>
</Loggers>
The problem is that Root level="INFO"
overrides the Logger section for module-core and keeps displaying INFO Logs across all the project.
Is there a way to ignore the root level section and force log4j2 to display the logs only for my desired sections within the modules only?
Thanks!