Log4Net +完成后发送电子邮件?

ebb*_*ebb 9 log4net

我刚刚开始使用Log4Net ...我现在想要发送一封电子邮件,其中包含附加或直接邮寄的完整日志.使用SmtpAppender的问题在于它需要一个未知的bufferSize,因为它应该发送邮件,无论是充满错误还是信息.

更新:我的配置文件

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">

    <to value="ebb@mail.com" />
    <from value="ebb@mail.com" />
    <subject value="Backup Application - Log" />
    <smtpHost value="mailserver" />
    <authentication value="1" />
    <username value="userName" />
    <password value="mypw" />

    <port value ="25"/>
    <lossy value="true" />
    <bufferSize value="500" />

    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="ALL"/>
    </evaluator>

    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%timestamp [%thread] %-5level %logger – %message%newline" />
    </layout>

</appender>
Run Code Online (Sandbox Code Playgroud)

usr*_*ΛΩΝ 16

BufferSize等于必须缓冲的日志消息的数量(即,如果设置为512,则一旦收集了512条消息,将发送邮件).

我相信将它设置为int.MaxValue(这是2.147.483.647)是一个合理的选择.对于一个系统来说,20亿条消息太多了,甚至是长时间运行的.

如果你给我10分钟,我会确认你(来自源代码),如果你清理停止你的应用程序,到目前为止收集的所有日志将被发送

[更新]:确认 !! 析构函数按预期方式刷新队列

[添加]我会删除有损和评估者.你的问题很明显:评估者优先于缓冲区:) :)

评估器用于在满足特定条件时刷新队列.你的病情等于true.触发此条件时,将发送电子邮件,因此这就是每次单个日志调用时发送邮件的原因.

这与仅发送信息和错误消息略有不同,这是通过日志过滤实现的.

删除这两个属性,您的代码将起作用.设置int.MaxValue将允许您存储最大可能的消息数.这不太可能(你最好赢得Superenalotto的178万欧元奖金,就像今晚的一些人一样,或被你头脑中的彗星击中)应用程序在一次运行中收集超过20亿个错误/信息.