有条件的记录与log4net的(Conditional logging with log4net)

2019-10-21 00:13发布

我有一个使用log4net的使用文本和SMTP追加程序的程序。

当程序运行时数记录由SMTP追加程序捕获并发送邮件之前被缓冲等待程序结束。

当程序已接近完成我可能会发现我并不需要发送邮件,其实我日志像“没事做”。

我知道这是可以通过代码来操纵附加目的地的配置,所以我可以抑制邮件设置的门槛了。

我想知道是否有可能只使用log4net的配置,以获得相同的结果:如果一个特定的字符串被随时记录的SMTP附加器不应发送电子邮件。 相反,如果该字符串没有登录它应该表现正常,并把所有符合定义的过滤器的行。

Answer 1:

TL; DR;

  • 创建一个自定义ITriggeringEventEvaluator
  • 这个评估配置SMTP的appender:决定什么时候缓冲区满一定会发生什么(丢弃的消息,给他们)
  • 使用您的appender的自动冲水向前发送日志事件

有在两个属性BufferingAppenderSkeleton在log4net的,可能这里感兴趣。 当您配置这样一个appender是LossyEvaluatorLossyEvaluator用于确定邮件是否应该被发送到下一个附加目的地。

Evaluator属性可以让你定义一个类继承ITriggeringEventEvaluator ; 当被记录的消息和缓冲器是满的,评估器被调用,如果它在返回true IsTriggeringEvent方法处理的事件缓冲器。 该LossyEvaluator作品以同样的方式,但它被调用来决定是否会从缓存中消失,因为它是完全必须登录或不是最早的事件。

由于您的SmtpAppenderBufferingAppenderSkeleton ,您可以使用Evaluator属性,以确定是什么原因引发或不被发送的电子邮件(即您可以说“不登录”,或任何记录事件)

但是,如果你希望你的appender到自己决定是否要关闭时发送的事件日志(即它应该自动冲水与否)它是LossyEvaluator时使用。

现在的坏消息:只有一个实例ITriggeringEventEvaluator在log4net的实现,其评估根据自己的级别的日志事件。 所以,你将不得不以承认你的应用程序发送到appender的特殊信息编写自己的触发器。



文章来源: Conditional logging with log4net