如何以编程方式决定smtpappender是否必须发送邮件

时间:2014-07-14 10:03:19

标签: log4net

我有一个c#程序,它在log appender和smtp appender上都记录了log4net。

我想始终保留日志文件,但在我的c#代码的程序结束时,我想决定是否必须发送电子邮件。

通常的级别或文本过滤器在这里没有帮助,因为在程序运行时我记录了很多可能有趣或不重要的东西,我知道这只是在过程结束时。

是否可以"阻止"代码的smtp appender?

1 个答案:

答案 0 :(得分:1)

您需要将appender上的Threshold属性设置为OFF以禁用日志记录,否则将其设置为所需的值,如下所示:

private static void SetEmailLogging(bool enabled)
{
    // Assuming there aren't more than 1 SmtpAppenders
    var appender = log4net.LogManager.GetRepository()
                                     .GetAppenders()
                                     .OfType<SmtpAppender>()
                                     .SingleOrDefault();

    if (appender == null)
    { 
        return;       
    }

    // Set the level you want.
    appender.Threshold = enabled ? Level.All : Level.Off;

    appender.ActivateOptions();
}