logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Rytina (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (LOG4J2-441) logger level configuration does not work correct
Date Thu, 07 Nov 2013 14:37:18 GMT

     [ https://issues.apache.org/jira/browse/LOG4J2-441?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Andreas Rytina updated LOG4J2-441:
----------------------------------

    Description: 
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. This looks like a bug in log4j 2.0: 
Logger1 considers the levels {info, debug, warning} but not the level trace. So what is the
default level, if there is no level defined at the logger header and also not at the appender-ref?
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
similare 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|Logger2: info 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|Logger2: info 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|Logger2: info 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}


  was:
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. This looks like a bug in log4j 2.0: 
Logger1 considers the levels {info, debug, warning} but not the level trace. So what is the
default level, if there is no level defined at the logger header and also not at the appender-ref?
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
similare 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|Logger2: info 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|Logger2: info 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|Logger2: info 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}



> 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
>         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, log4jtest.zip
>
>
> 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. This looks like a bug in log4j 2.0: 
> Logger1 considers the levels {info, debug, warning} but not the level trace. So what
is the default level, if there is no level defined at the logger header and also not at the
appender-ref? 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 similare 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|Logger2: info 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|Logger2: info 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|Logger2: info 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.1#6144)

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


Mime
View raw message