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

Remko Popma commented on LOG4J2-520:
------------------------------------

Andre, I've started to look at this issue again.

With your AppenderOverwhelmer program, and the log4j2.xml file attached to this 
issue, I can reproduce the issue.

So far, I've found that the application thread does wait correctly until there 
are no more log events in the ringbuffer. Only after the ringbuffer is empty 
does the program go ahead and shut down the disruptor.
Interestingly, even though the queue is empty, the ConsoleAppender only prints 
out 730,000-740,000 events (out of 1,000,000) before the application exits. I 
added a counter to this appender and this counter confirms not all events have 
reached the appender. What I don't understand yet is why the ringbuffer reports 
it is empty: this should not happen unless all events have been consumed...

What is also interesting is that I cannot reproduce the problem with a 
RandomAccessFileAppender. If I replace the ConsoleAppender with a 
RandomAccessFileAppender and run the ApplicationOverwhelmer the resulting log 
file has all 1,000,000 events without dropping a single event.

I need to look at this some more.

> RollingRandomAccessFile with Async Appender skip logs
> -----------------------------------------------------
>
>                 Key: LOG4J2-520
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-520
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.0-beta9, 2.0-rc1
>         Environment: JDK 1.6, Eclipse
>            Reporter: JavaTech
>            Assignee: Remko Popma
>         Attachments: log4j2.xml
>
>
> I have written a sample code which will write DEBUG, INFO , WARN logs in a 
> single flile, I have written a logs in FOR loop printing numbers from 1 to 99.
> sometime it print numbers incomplete sequence, like 1 to 67, 1 to 89 etc.
> log4j2.xml
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration>
>   <Appenders>
>     <RollingRandomAccessFile name="RollingRandomAccessFile"
>       fileName="logs/app.log" 
> filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log"
>       immediateFlush="false" append="true" ignoreExceptions="false">
>       <PatternLayout>
>         <Pattern>%d %-5p [%t] (%F:%L) - %m%n</Pattern>
>       </PatternLayout>
>       <Policies>
>         <TimeBasedTriggeringPolicy />
>         <SizeBasedTriggeringPolicy size="100KB"/>
>       </Policies>
>     </RollingRandomAccessFile>
>     <Async name="ASYNC" includeLocation="true">
>       <AppenderRef ref="RollingRandomAccessFile" />
>     </Async>
>   </Appenders>
>   <Loggers>
>     <Root level="debug" includeLocation="true">
>       <AppenderRef ref="ASYNC" />
>     </Root>
>   </Loggers>
> </Configuration>
> {code}
> Sample Java Code
> {code}
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> public class LoggerUtil {
>       public static Logger logger = LoggerFactory.getLogger(LoggerUtil.class);
>       public static void main(String[] args) {
>               System.out.println("start");
>               logger.debug("debug log");
>               logger.info("info log");
>               logger.error("error log");
>               for(int i = 0; i < 99; i++) {
>                       logger.warn("{}",i);
>                       System.out.println("I : - " + i);
>               }
>               logger.error("finish printing logs");
>               System.out.println("end");              
>       }
> }
> {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