JocularJoe commented on LOG4NET-511:

Thanks for doing this, but just one point.

AppenderSkeleton.Flush should return true.

Only a buffering or asynchronous appender would ever return false, generally 
because the timeout has expired before all buffered events have been processed. 
 Other appenders will want to inherit an implementation that returns true.

> API to flush appenders
> ----------------------
>                 Key: LOG4NET-511
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-511
>             Project: Log4net
>          Issue Type: Wish
>          Components: Appenders, Core
>    Affects Versions: 1.2.15
>         Environment: NA
>            Reporter: Joe
>            Priority: Minor
>             Fix For: 2.0.6
> I would like to see an API that flushes any appenders that have buffered 
> data. E.g. a method LogManager.Flush().  An application might call such a 
> method at regular intervals, e.g. on a Timer.
> A naive implementation with the current log4net would iterate through 
> appenders, looking for those that support flushing, and call the appender's 
> flush method, e.g.:
>     foreach (IAppender appender in 
>              LogManager.GetRepository().GetAppenders())
>     {
>         BufferingAppenderSkeleton bas = appender 
>                         as BufferingAppenderSkeleton;  
>         if (bas != null) bas.Flush();
>     }
> But (a) I'm not sure this is thread-safe and (b) there are potentially other 
> appenders that may want to be able to flush data (e.g. a TextWriterAppender 
> with ImmediateFlush = false).
> The request consists of:
> - Add an interface, IFlushableAppender or equivalent, with a single method 
> Flush().
> - Implement this interface in all relevant appenders 
> (BufferingAppenderSkeleton, TextWriterAppender, ...)
> - Add a thread-safe static Flush() method to LogManager.

This message was sent by Atlassian JIRA

Reply via email to