tags:

views:

141

answers:

2

Which is the quickest appender for log4Net apart from ConsoleAppender?

+3  A: 

You could write a log4Net equivalent of NullAppender, which would be very fast... (Oops - I originally thought the question was about log4j; the same advice applies though.)

Of course, that wouldn't do anything useful - which leads me to wonder why you're placing so much importance on speed. The normal approach is to work out what you need, then benchmark/profile it to check whether it performs adequately. I suspect that you'll be swamped with more data than you can usefully process before it actually becomes a bottleneck. Do you have a known performance problem with logging?

Jon Skeet
No the performance problem is not with logging but in general I am looking into improving the performance of an application and have added log4Net to profile it at the runtime. I don't want this to be too much of an overhead as the application is already slow. So I am looking for the appender which is the fastest.
Amitabh
@Amitabh: If the application is already slow, that means logging is even *less* likely to have a significant impact. Really, use whatever gets you logs most easily, and then just use logging sensibly. That's likely to be the quickest way to improve your app's overall speed.
Jon Skeet
I'll add that sometimes the issue isn't how slow logging is but how invasive. For example, if you're logging from multiple threads, the very act of logging can cause them to synchronize, which throws off what you want to measure. The usual answer is to log into a queue, which is processed in a single thread.
Steven Sudit
+4  A: 

Checkout the BufferingForwardingAppender. We use this which forwards to a RollingFileAppender. It batches the writes and allows the code to continue without waiting for the write. We setup an Evaluator to force a flush at the WARN threshold and set lossy to false so we don't miss any messages.

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
    <bufferSize value="512" />
    <lossy value="false" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <appender-ref ref="RollingFileAppender" />
</appender>
Mike Schall