You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Laurent Hasson (JIRA)" <ji...@apache.org> on 2017/11/28 19:43:01 UTC
[jira] [Updated] (LOG4J2-2135) Logs are not flushed when using
AsyncRoot
[ https://issues.apache.org/jira/browse/LOG4J2-2135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Laurent Hasson updated LOG4J2-2135:
-----------------------------------
Description:
With the following code, by the time the program ends, a number of logs are missing in the output. They may be either lost or not flushed?
{{public class Log4JTest
{
protected static final Logger Log = LogManager.getLogger(Log4JTest.class.getName());
protected static final int MAX = 10;
public static void main(String[] args)
{
for (int i = 0; i < MAX; ++i)
{
for (int j = 0; j < MAX; ++j)
{
Log.fatal("Fatal i=" + i + "; j=" + j + ";");
Log.error("Error i=" + i + "; j=" + j + ";");
Log.warn("Warn i=" + i + "; j=" + j + ";");
Log.info("Info i=" + i + "; j=" + j + ";");
Log.debug("Debug i=" + i + "; j=" + j + ";");
Log.trace("Trace i=" + i + "; j=" + j + ";");
}
}
Log.info("DONE.");
}
}}}
I'd expect the program to end and all log messages to be output properly, ending with the "DONE" message.
If i change the config file to a rolling appender, i can observe the same behavior, i.e., missing messages.
{{
<RollingFile name="FILES" fileName="${log-path}/aaa.log" filePattern="${log-path}/aaa.%i.log.gz">
<PatternLayout>
<pattern>%d{MMdd.HHmmss.SSS}#%-3t %level{length=1} %15.15c{1}| %m%ex{20}%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="99999" compressionLevel="6"/>
</RollingFile>}}
was:
With the following code, by the time the program ends, a number of logs are missing in the output. They may be either lost or not flushed?
public class Log4JTest
{
protected static final Logger Log = LogManager.getLogger(Log4JTest.class.getName());
protected static final int MAX = 10;
public static void main(String[] args)
{
for (int i = 0; i < MAX; ++i)
{
for (int j = 0; j < MAX; ++j)
{
Log.fatal("Fatal i=" + i + "; j=" + j + ";");
Log.error("Error i=" + i + "; j=" + j + ";");
Log.warn("Warn i=" + i + "; j=" + j + ";");
Log.info("Info i=" + i + "; j=" + j + ";");
Log.debug("Debug i=" + i + "; j=" + j + ";");
Log.trace("Trace i=" + i + "; j=" + j + ";");
}
}
Log.info("DONE.");
}
}
I'd expect the program to end and all log messages to be output properly, ending with the "DONE" message.
If i change the config file to a rolling appender, i can observe the same behavior, i.e., missing messages.
<RollingFile name="FILES" fileName="${log-path}/aaa.log" filePattern="${log-path}/aaa.%i.log.gz">
<PatternLayout>
<pattern>%d{MMdd.HHmmss.SSS}#%-3t %level{length=1} %15.15c{1}| %m%ex{20}%n</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="99999" compressionLevel="6"/>
</RollingFile>
> Logs are not flushed when using AsyncRoot
> -----------------------------------------
>
> Key: LOG4J2-2135
> URL: https://issues.apache.org/jira/browse/LOG4J2-2135
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.9.1
> Environment: *+Libraries+*:
> * java 1.8.151
> * log4j-api-2.9.1.jar
> * log4j-core-2.9.1.jar
> * log4j-web-2.9.1.jar
> * disruptor-3.3.6.jar
> *+Configuration file+*:
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration status="info">
> <Appenders>
> <Console name="Console" target="SYSTEM_OUT" >
> <PatternLayout>
> <pattern>%d{MMdd.HHmmss.SSS}#%-3t %level{length=1} %15.15c{1}| %m%ex{20}%n</pattern>
> </PatternLayout>
> </Console>
> </Appenders>
> <Loggers>
> <AsyncRoot level="debug">
> <AppenderRef ref="Console" />
> </AsyncRoot>
> </Loggers>
> </Configuration>
> Reporter: Laurent Hasson
>
> With the following code, by the time the program ends, a number of logs are missing in the output. They may be either lost or not flushed?
> {{public class Log4JTest
> {
> protected static final Logger Log = LogManager.getLogger(Log4JTest.class.getName());
> protected static final int MAX = 10;
> public static void main(String[] args)
> {
> for (int i = 0; i < MAX; ++i)
> {
> for (int j = 0; j < MAX; ++j)
> {
> Log.fatal("Fatal i=" + i + "; j=" + j + ";");
> Log.error("Error i=" + i + "; j=" + j + ";");
> Log.warn("Warn i=" + i + "; j=" + j + ";");
> Log.info("Info i=" + i + "; j=" + j + ";");
> Log.debug("Debug i=" + i + "; j=" + j + ";");
> Log.trace("Trace i=" + i + "; j=" + j + ";");
> }
> }
> Log.info("DONE.");
> }
> }}}
> I'd expect the program to end and all log messages to be output properly, ending with the "DONE" message.
> If i change the config file to a rolling appender, i can observe the same behavior, i.e., missing messages.
> {{
> <RollingFile name="FILES" fileName="${log-path}/aaa.log" filePattern="${log-path}/aaa.%i.log.gz">
> <PatternLayout>
> <pattern>%d{MMdd.HHmmss.SSS}#%-3t %level{length=1} %15.15c{1}| %m%ex{20}%n</pattern>
> </PatternLayout>
> <Policies>
> <SizeBasedTriggeringPolicy size="100 MB" />
> </Policies>
> <DefaultRolloverStrategy max="99999" compressionLevel="6"/>
> </RollingFile>}}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)