Continuando a seqüência de publicações sobre o framework Log4Net, vamos mostrar a configuração necessária para que o Log4Net envie mensagens de email com a mensagem da aplicação. Vamos usar o projeto inicial que pode ser baixado aqui.
Abrindo o arquivo web.config vamos mudar nossa chave do Log4Net acrescentando a configuração da conta de email que vai enviar e receber as mensagens. Lembrando que com essa framework é possível ter varias configurações, possibilitando salvar o arquivo em disco e enviar email simultaneamente.
Vamos deixar nossa chave da seguinte forma:
<log4net>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="clayr@servidor.com.br" />
<from value="clayr@servidor.com.br" />
<subject value="Titulo - Ocorreu um Erro" />
<authentication value="1" />
<username value="clayr@servidor.com.br" />
<password value="minhasenha" />
<smtpHost value="201.10.10.1" />
<bufferSize value="1" />
<port value="587"/>
<layout type="log4net.Layout.SimpleLayout" />
appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="Log\\MeuArquivoDeLog.log"/>
<appendToFile value="true"/>
<datePattern value="yyyy-MM-dd"/>
<rollingStyle value="Composite"/>
<maximumFileSize value="1MB"/>
<maxSizeRollBackups value="10"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%newline[%-5level]%newline%message%newline"/>
layout>
appender>
<appender name="A2" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline" />
layout>
appender>
<root>
<level value="DEBUG" />
<appender-ref ref="A2" />
root>
<logger name="LogInFile">
<level value="Error"/>
<appender-ref ref="RollingFile"/>
logger>
<logger name="LogInEmail">
<level value="All"/>
<appender-ref ref="SmtpAppender"/>
logger>
log4net>
Acima temos a configuração mista, ou seja, para salvar em arquivo, mostrar no trace e enviar email. Inicialmente o projeto estava chamando sempre para salvar em arquivo:
private log4net.ILog logger;
protected void Page_Load(object sender, EventArgs e)
{
//Vamos usar o logger LogInFile, que salva todos os tipos de erro
logger = log4net.LogManager.GetLogger("LogInFile");
logger.Error("Lança a mensagem de error");
}
No método GetLogger nos pedimos para usar a configuração para salvar em arquivo. Basta fazer a modificação para chamar a configuração do e-mail:
logger = log4net.LogManager.GetLogger("LogInEmail");
logger.Error("Lança a mensagem de error");
Uma boa idéia seria usar para enviar email somente quando acontecesse erros não tratados, para isso, basta colocar dentro do Global.asax no método Application_Error.
Basta pegar a exceção lançada e passar a mensagem de erro para enviar:
private log4net.ILog logger;
protected void Application_Error(object sender, EventArgs e)
{
Exception exc = Context.Error;
if (exc is HttpUnhandledException)
{
exc = Context.Error.InnerException;
logger = log4net.LogManager.GetLogger("LogInEmail ");
logger.Error(exc.Message);
}
}
Agora o colocar esse tratamento de erro numa classe especializada, gerar uma DLL que possa ser usada em qualquer aplicação sua.

