Hello XML configuration with explanations:
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> </Console> <Console name="toStringProperty" target="SYSTEM_OUT"> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m 'toStringProperty'%n" /> </Console> </Appenders> <Loggers> <Logger name="com.oaks.A" level="info" additivity="false"> <AppenderRef ref="toStringProperty" /> </Logger> <Root level="debug"> <AppenderRef ref="STDOUT" /> </Root> </Loggers> </Configuration>
Add a verification class:
public class A { private Logger logA = LogManager.getLogger(this.getClass()); public static void main(String... d) { A a = new A(); a.logA.debug("debug a"); a.logA.info("info a"); a.logA.error("error a"); B b = a.new B(); b.logB.debug("debug b"); b.logB.info("info b"); b.logB.error("error b"); } class B { private Logger logB = LogManager.getLogger(this.getClass()); } }
so:
when you specify a logger level, you filter messages (data transferred to a Logger object). The filtering principle is as follows: all messages above the specified level will be discarded (and therefore will not go further! (for example, to the root logger)) Filtering levels:
(top) ALL -> TRACE -> DEBUG -> INFO -> WARN -> ERROR -> FATAL -> OFF
From the above, your personal logger tuned to a lower level discards DEBUG level messages.