> Nicko, what is the difference between threshold and evaluator?
>
> <evaluator type="log4net.Core.LevelEvaluator">
> <threshold value="ERROR"/>
> </evaluator>
>
> <threshold value="ERROR" />
>
> Does one discard messages sooner than the other?
The threshold is different to the evaluator.
<threshold value="ERROR" />
The Threshold is implemented in the AppenderSkeleton and therefore supported by
almost all appenders. It is just a simple test that is used to ignore logging
events that have a level below the threshold. The threshold is checked early
and as a simple test is very performant.
There is another way to specify the same behaviour as the threshold using
filters. Filters are very much more flexible and as they are pluggable you can
also develop your own custom logic and insert it into the filter chain.
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="OFF" />
</filter>
Like the Threshold check Filters are implemented in the AppenderSkelton base
class and are supported by almost all appenders. The above filter has the same
effect as <threshold value="ERROR" />. It is a LevelRangeFilter that will allow
through any events with a level in the range ERROR to OFF (inclusive). Note
that OFF is the name of the highest level, conversely ALL is the name of the
lowest level.
Filters have a great deal of flexibility because multiple filters can be
chained together to provide fine grained control over the events that are
output. Because of this they also have a higher cost in terms of performance,
each filter in the chain is an object and is asked to decide on the correct
course of action. In the simple case of the threshold filtering the Threshold
property should be used in preference to a filter.
The Evaluator is implemented by the BufferingAppenderSkeleton and is therefore
only supported by appenders that extend this base class and provide support for
buffering. The SmtpAppender is one such appender.
The Evaluator is a pluggable object that is used by the
BufferingAppenderSkeleton to determine if a logging event should not be
buffered, but instead written/sent immediately. If the Evaluator decides that
the event is important then the whole contents of the current buffer will be
sent along with the event. The evaluator does not function like the threshold
or a filter in that it does not discard events.
Typically an SmtpAppender will be setup to buffer events before sending as the
cost of sending an email may be relatively high. If an important event arrives,
say an ERROR, we would like this to be delivered immediately rather than
waiting for the buffer to become full. This is where the Evaluator comes in as
it allows us to say: "when an important event arrives don't worry about
buffering, just send over everything you have right now".
How an important event is identified is customisable. The only built-in
implementation is the log4net.Core.LevelEvaluator that check the level value.
The BufferingAppenderSkeleton has various properties that allow more complex
behaviour. Principally the Lossy flag. This tells the appender what to do when
the buffer is full.
If Lossy is false then the appender will send the contents of the buffer once
it becomes full. In this mode the appender is essentially buffering.
If Lossy is true and the buffer is full then the appender will discard the
oldest event in the buffer when a new event is received. In this mode the
appender is functioning as a leaky bucket for events. How is this useful? Well
the Evaluator still functions and when an important event arrives the whole of
the current buffer is sent, for example you can set this up to capture the
events that precede an error. If the evaluator is triggered by an Error event
then the buffer would be filled with all the lower level events received before
the Error (up to the BufferSize). This can be very useful in diagnosing an
error condition and also prevents your logs from becoming too big.
Cheers,
Nicko
>
> --- Shireesh Thanneru <[EMAIL PROTECTED]> wrote:
>
> > Try using the applying the following level filter to achieve that:
> >
> > <filter type="log4net.Filter.LevelRangeFilter">
> > <levelMin value="ERROR" />
> > <levelMax value="FATAL" />
> > </filter>
> >
> > Use the above filter filter element in your SmtpAppender
> configuration
> > and see.
> >
> > Thanks,
> >
> > Shireesh Thanneru
> >
> > --- Farid LAOUFI <[EMAIL PROTECTED]> wrote:
> >
> > > Hello,
> > > I'm doing a windows service which uses a SmtpAppender and an
> > > EventLogAppender. The EventLogAppender logs all messages which
> > level
> > > is
> > > greater or equal to DEBUG, the SmtpAppender all messages which
> > level
> > > is
> > > greater or equal to ERROR. Now if I try this :
> > >
> > > ILog logger = LogManager.GetLogger(this.GetType());
> > > logger.Info("Info 1");
> > > logger.Info("Info 2");
> > > logger.Error("ERROR !!!!!!!");
> > >
> > > I receive a mail message which contains :
> > >
> > > Info 1
> > > Info 2
> > > ERROR !!!!!!!
> > >
> > > but I'd like only :
> > >
> > > ERROR !!!!!!!
> > >
> > > Can you help me please ? Here a part of my App.config :
> > >
> > > <!-- Informations requises par log4net. --> <log4net>
> > >
> > > <appender name="EventLogAppender"
> > > type="log4net.Appender.EventLogAppender" > <applicationName
> > > value="Serveur AP+" /> <logName value="APPlus" /> <layout
> > > type="log4net.Layout.PatternLayout">
> > > <conversionPattern value="%message%newline%exception" />
> </layout>
> > > </appender>
> > >
> > > <appender name="SmtpAppender"
> type="log4net.Appender.SmtpAppender">
> > > <to value="*************" /> <!-- Liste des adresses e-mail
> > > (séparateur :
> > > point-virgule) auxquelles seront envoyées les erreurs survenues.
> > -->
> > > <from value="*************" />
> > > <subject value="[AP+] Une erreur est survenue" /> <smtpHost
> > > value="*************" /> <bufferSize value="512" /> <lossy
> > > value="false" /> <evaluator type="log4net.Core.LevelEvaluator">
> > > <threshold value="ERROR"/>
> > > </evaluator>
> > > <layout type="log4net.Layout.PatternLayout">
> > > <conversionPattern value="%message%newline%exception" />
> </layout>
> > > </appender>
> > >
> > > <root>
> > > <level value="DEBUG" />
> > > <appender-ref ref="EventLogAppender" /> <appender-ref
> > > ref="SmtpAppender" /> </root>
> > >
> > > <!-- Ceci permet de désactiver le logging des messages
> provenant de
> >
> > > NHibernate. -->
> > > <logger name="NHibernate">
> > > <level value="OFF" />
> > > </logger>
> > >
> > > </log4net>
> > >
> >
> >
>
>
>