Hey!

 

You have an evaluator set which triggers a flush with every log event that
is >=DEBUG. Maybe that's the reason?

 

The purpose of the evaluator is to early trigger flushes (bypass the
buffering) when exceptional log events happen. Now, given you are logging
only debug messages the evaluator would hit on every log event and thus
flush your events one by one. That of course comes shipped with a terrible
performance impact.

 

Cheers

 

Von: Howe, Peter L [mailto:ph...@paychex.com] 
Gesendet: Montag, 21. Oktober 2013 15:17
An: Log4NET Dev
Betreff: Remoting appender sending deathly slow - was RE: Remote appender
not sending

 

It probably takes 10 seconds for the client program to log all 1,000 events
(just some test code.)  The flush is every 10 seconds.  I changed my buffer
size to 50 and the flush period to 30 seconds - same behavior.  The call on
the server to public void LogEvents(LoggingEvent[] events)- the one required
method on the IRemoteLoggingSink interface, is still never called with more
than one event at a time, and takes a painfully long time to process all of
the 1,000 events logged/sent by the test client app.

 

Peter

 

 

From: Dominik Psenner [mailto:dpsen...@gmail.com] 
Sent: Friday, October 18, 2013 5:49 PM
To: Log4NET Dev
Subject: Re: Remote appender not sending

 

Maybe cause you're flushing too often? As for the last message you did it
with every event, didnt you?

 

2013/10/18 Howe, Peter L <ph...@paychex.com <mailto:ph...@paychex.com> >

Now that I have it "working" (sort of), I am noticing some very
non-performant conditions.

 

When I run the client and server process, and leave everything running long
enough, I get all the events to the server, however I see dozens of remoting
connections in NETSTAT, and the server process never sees a batch of events
larger than one.  This is the relevant parts of my .config on the client
side:

 

    <appender name="RemotingAppender"

              type="Paychex.IP.Common.Logging.TimedRemotingAppender" >

      <sink value="tcp://localhost:8085/IPRemotingLogger" />

      <bufferSize value="20" />

      <flushPeriod>10</flushPeriod>

      <lossy value="false" />

      <onlyFixPartialEventData value="true" />

      <evaluator type="log4net.Core.LevelEvaluator">

        <threshold value="DEBUG" />

      </evaluator>

    </appender>

 

    <root>

      <priority value="ALL"/>

      <appender-ref ref="RemotingAppender" />      

    </root>

 

 

The client calls logging 1,000 times.  The main program (client) thread is
done almost immediately, but if I DON'T leave the client running long enough
(which is a number of minutes) for the pool threads to send all the events,
I get this at program close:

 

    log4net: Hierarchy: Shutdown called on Hierarchy
[log4net-default-repository]

    log4net:ERROR [TimedRemotingAppender] RemotingAppender
[RemotingAppender] failed

    to send all queued events before close, in OnClose.

 

I don't understand why the events are being sent to the server one at a
time, instead of 20 (my buffer size.)

 

Thanks,

 

The information contained in this message may be privileged, confidential
and protected from disclosure. If the reader of this message is not the
intended recipient, or an employee or agent responsible for delivering this
message to the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is strictly
prohibited. If you have received this communication in error, please notify
your representative immediately and delete this message from your computer.
Thank you.

Reply via email to