views:

184

answers:

2

We use the log4net to log the winform application's event and error. Our customer want check the log file during the application running. But I can't find out when and how the log4net do the write(commit) operation. And how to meet the customer's requirement, except creating another logger by myself. Any help? Thanks.

A: 

You talk about a log file, so presumably you're using FileAppender or a derived class. This will buffer output by default. Buffered output is much more efficient, so to meet your requirement, I'd suggest you provide some mechanism to flush the log before viewing it, rather than forcing a commit after each write operation.

You can do this with code like the following:

foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
    BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
    if (b != null) b.Flush();
}
Joe
"This will buffer output by default."This is not true! FileAppender (more specifically its base class TextWriterAppender) flushes after every Append operation! See http://logging.apache.org/log4net/release/sdk/log4net.Appender.TextWriterAppender.ImmediateFlush.htmlTherefore, you do not need to do anything because the latest log entries will always be written to the file immediately, so that your customer can simply open the file.
gehho
@gehho is right. FileAppender does NOT buffer. The built-in appenders that does buffering are AdoNet-, BufferingForwarding-,Remoting- and the SmtpXXX appenders.
Peter Lillevold
+3  A: 

If you're using the FileAppender, this appender inherits the TextWriterAppender, which in turn exposes the ImmediateFlush property. The value of this property is true by default, and forces the appender to do a Flush() on the underlying stream for each Append operation.

Depending on how you envision the customer "monitoring" the log file, an idea could be to enable monitoring from within your application. This can be done by in addition to appending to a file, using the MemoryAppender and reading events from that appender.

Peter Lillevold