如何通过电子邮件将log4net日志文件通过电子邮件发送给他们?

如何通过电子邮件将log4net日志文件通过电子邮件发送给他们?

问题描述:

我有以下的web.config如何通过电子邮件将log4net日志文件通过电子邮件发送给他们?

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
<log4net> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="***************\\log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <!--max size roll backups: number of files produced before overridden (.count) after name--> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="WARN" /> 
     <levelMax value="FATAL" /> 
     </filter> 
    </appender> 
    <root> 
     <level value="WARN" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
    </log4net> 

和电子邮件

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="**********@***.com"> 
     <network host="smtp.gmail.com" port="***" defaultCredentials="false" userName="**************" password=***********" enableSsl="true" /> 
     </smtp> 
    </mailSettings> 
    </system.net> 

一切工作正常。然而,我想要在每次文件翻转时通过电子邮件发送一个日志文件...所以当一个文件已满并且下一个文件开始追加时,我想通过电子邮件发送完整文件。我不知道如何甚至开始这个...

感谢

+0

我没有做过,但我的猜测是你需要建立一个新的追加程序类,从'RollingFileAppender'也许一个推导,并添加电子邮件的代码存在。看看[源代码](http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net/Appender/RollingFileAppender.cs?view=markup),你可能很容易做到这一点只需重写一个或两个虚拟方法即可。 – 2014-09-27 16:30:49

你必须为了增加邮寄文件来创建自定义的appender从RollingFileAppender继承,并重写AdjustFileBeforeAppend方法。以下是现有方法,可以修改您可以修改的RollingFileAppender的文件。使用File属性查找文件名并使用System.Net.Mail.SmtpClient发送邮件。

// log4net.Appender.RollingFileAppender 
protected virtual void AdjustFileBeforeAppend() 
{ 
    if (this.m_rollDate) 
    { 
     DateTime now = this.m_dateTime.Now; 
     if (now >= this.m_nextCheck) 
     { 
      this.m_now = now; 
      this.m_nextCheck = this.NextCheckDate(this.m_now, this.m_rollPoint); 
      // send the file here 
      this.RollOverTime(true); 
     } 
    } 
    if (this.m_rollSize) 
    { 
     if (this.File != null && ((CountingQuietTextWriter)base.QuietWriter).Count >= this.m_maxFileSize) 
     { 
      // send the file here 
      this.RollOverSize(); 
     } 
    } 
}