Benjamin Jaton created LOG4J2-1197:
--------------------------------------

             Summary: Improve RollingFileAppender to avoid having stale log 
events in the buffer
                 Key: LOG4J2-1197
                 URL: https://issues.apache.org/jira/browse/LOG4J2-1197
             Project: Log4j 2
          Issue Type: Improvement
            Reporter: Benjamin Jaton


With bufferedIO=true the buffer contains log events that I want to see, but the 
buffer is only flushed to disk when it is full (which is not frequent enough).

Typical scenario is when the server is not in production, so almost no traffic 
except for the request manually triggered by the operator, usually in order to 
debug something.

>From Remko:
=====
If you use AsyncAppender or Async Loggers, the buffer will be flushed when the 
queue is empty. This results in efficient IO (lumping together IO operations 
where possible), but at the same time your log file always reflects the most 
recent message.

For synchronous buffered logging, I can see how a smarter flushing mechanism 
would be useful.

Question is, what would trigger the check (whether the buffer needs to be 
flushed)?

Easiest is to check with each log event, but if no new event arrives you still 
end up with a stale buffer. Better than nothing, but not great.

An alternative is to check periodically from a background thread and flush if 
the buffer is non-empty. This probably gives the best results but is fairly 
complex to implement.

(...)
Now, with Async Appenders/Loggers, we can use what Martin Thompson calls "smart 
batching
<http://mechanical-sympathy.blogspot.jp/2011/10/smart-batching.html>": when the 
background thread processes a log event, it checks if the queue is now empty 
(no further log events are in the pipeline to be processed) and if it is, it 
will also call Appender.flush() in addition to the above.
=====

Note 1: The FlumeAppender uses a maxDelayMillis to address this.
Note 2: Could all synchronous appenders benefit from this improvement?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to