[ 
https://issues.apache.org/jira/browse/LOG4J2-441?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14031416#comment-14031416
 ] 

Ralph Goers commented on LOG4J2-441:
------------------------------------

If you have a Logger of org.x.y.z configured by a LoggerConfig of org.x.y.z at 
DEBUG then all debug messages using that Logger should appear in LOG4J 2, 
regardless of how the root logger is configured. If you are not seeing that 
behavior then there is a bug.  However, we have many unit tests for that so I'd 
be very surprised if that was the case. If you have a Logger of org.x.y it 
would use the root Logger's level since it has no configuration of its own.  If 
you are seeing some other behavior than this then please provide the 
configuration file and some code to demonstrate the problem.

The only real difference between Log4j 1 and Log4j 2 is that the logger 
configuration is in a separate hierarchy from the loggers. In Log4j 2 a Logger 
will point to the LoggerConfig that best matches its name and then that 
LoggerConfig will point directly to its parent rather than having a single 
chain of Loggers, some of which are configured and some of which are not.

FWIW, the Log4j 1.2 manual was what was used as the basis for the initial 
version of the Log4j 2 manual. Many of the same examples should appear there, 
in this case probably on the Configuration page.

> logger level configuration does not work correct
> ------------------------------------------------
>
>                 Key: LOG4J2-441
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-441
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Core
>            Reporter: Andreas Rytina
>            Assignee: Ralph Goers
>         Attachments: log4j2.xml.row1, log4j2.xml.row10, log4j2.xml.row11, 
> log4j2.xml.row12, log4j2.xml.row13, log4j2.xml.row2, log4j2.xml.row3, 
> log4j2.xml.row4, log4j2.xml.row5, log4j2.xml.row6, log4j2.xml.row7, 
> log4j2.xml.row8, log4j2.xml.row9
>
>
> Configuring the loglevel in the logger does not work in combination with 
> configuring the loglevel at the appender-refs. I analyzed this with the 
> beta9. See the table which lists various loglevel configurations for the 3 
> loggers. The column format for the table is:
> Column 1-6 are the logger with their level config (level@logger1, 
> level@appender-ref)(level@logger2, level@appender-ref)(level@logger3, 
> level@appender-ref)
> Column 7 is the actual output
> Column 8 is the expected Output
> For instance the first row of the table shows a logging result which I not 
> expected in that way. You can take log4j2.xml.row1 to reproduce the first 
> row. The first logger is named "com". The second logger is named 
> "com.log4jtest" and the third logger is named "com.log4jtest.test". This 
> looks like a bug in log4j 2.0: 
> Logger1 considers the levels {info, debug, warning} but not the level trace. 
> {color:red}What is the default level, if there is no level defined at the 
> logger header and also not at the appender-ref?{color} Here it seems that the 
> Logger1 has the level debug as default which is not clear for me. For me it 
> would make sense if the default level is either OFF or ALL when there is no 
> explicit level set. But either way there should be a clear rule for this. The 
> other rows are showing similar inconsistent logging behaviour.
> |1|2|3|4|5|6|7|8|
> ||level 1 logger||level 1 appender-ref||level 2 logger||level 2 
> appender-ref||level 3 logger ||level 3 appender-ref||actual output||expected 
> output||
> |-|-|-|info|debug|debug|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger1: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger|
> |-|-|-|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger|
> |-|-|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger|
> |fatal|fatal|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger|
> |info|info|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|
> |debug|debug|info|info| |debug|no output|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|
> |info|debug|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|
> |debug|info|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|
> |debug|trace|info|info|-|debug|no output|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger|
> |-|-|info|info|fatal|debug|no output|Logger2: info logger
> Logger2: warning logger|
> |-|-|info|info|trace|debug|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger1: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger
> Logger1: trace logger|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger2: warning logger|
> |-|-|-|info|trace|debug|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger1: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger
> Logger1: trace logger|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger2: warning logger|
> |-|-|info|-|trace|debug|Logger3: info logger
> Logger2: info logger
> Logger1: info logger
> Logger3: debug logger
> Logger1: debug logger
> Logger3: warning logger
> Logger2: warning logger
> Logger1: warning logger
> Logger1: trace logger|Logger3: info logger
> Logger2: info logger
> Logger3: debug logger
> Logger2: warning logger|
> Here is the log4j2.xml:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8" ?>
> <configuration>
>       <appenders>
>               <console name="TestConsole0">
>                       <PatternLayout pattern="RootLogger: %msg%n"/>
>               </console>
>               <console name="TestConsole1">
>                       <PatternLayout pattern="Logger1: %msg%n"/>
>               </console>
>               <console name="TestConsole2">
>                       <PatternLayout pattern="Logger2: %msg%n"/>
>               </console>
>               <console name="TestConsole3">
>                       <PatternLayout pattern="Logger3: %msg%n"/>
>               </console>
>       </appenders>
>       
>       <loggers>
>               <logger name="com" >
>                       <appender-ref ref="TestConsole1" />
>               </logger>
>               
>               <logger name ="com.log4jtest" level="info">
>                       <appender-ref ref="TestConsole2" level="info"/>
>               </logger>
>               
>               <logger name ="com.log4jtest.test" level="fatal">
>                       <appender-ref ref="TestConsole3" level="debug"/>
>               </logger>
>               
>               <root level="error">
>                       <appender-ref ref="TestConsole0" level="error"/>
>               </root>
>       </loggers>
> </configuration>
> {code}
> And here are the logging calls:
> {code:title=Log4j2LogLevelTest.java|borderStyle=solid}
> package com.log4jtest.test;
> import static org.junit.Assert.*;
> import org.apache.logging.log4j.LogManager;
> import org.apache.logging.log4j.Logger;
> import org.junit.Test;
> public class Log4j2LogLevelTest {
>       private static final Logger logger = 
> LogManager.getLogger(Log4j2LogLevelTest.class);
>       
>       @Test
>       public void testLogLevel() {
>               logger.info("info logger");
>               logger.debug("debug logger");
>               logger.warn("warning logger");
>               logger.trace("trace logger");
>       }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to