foreach (Vida.Diversao D in Clayr.Items) { if (D is Programar) return double.MaxValue; }

quinta-feira, 27 de outubro de 2011

Enviando email com Log4Net

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.

terça-feira, 16 de agosto de 2011

Lançando Mensagens para o Output do Visual Studio com Log4Net

O Log4Net é um framework que permite à aplicação salvar log de diversas formas diferentes, sendo ele de erro ou não. Sua implementação é bastante simples, como já mostrado em outras publicações do blog.

Uma funcionalidade pouco conhecida no Log4Net é a possibilidade de lançar mensagens no momento do debug da sua aplicação, essas mensagens podem ser quando entrou em uma rotina extensa, quando deseja ver todas as modificações que a variável sofreu dentro de um laço.

Para isso, você pode usar o projeto da publicação anterior sobre o tema Log4Net clicando aqui.
Vamos modificar o arquivo Web.config, modificando justamente a configuração referente ao Log4Net:

  <log4net>
    <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>
  log4net>

Colocando essa configuração, agora vamos para a página padrão e vamos fazer a chamada da seguinte forma:

        private log4net.ILog logger;

        protected void Page_Load(object sender, EventArgs e)
        {
            /*Nesse Overload do Método GetLogger é preciso colocar o tipo,
             * no nosso caso será a propria classe onde está o código*/
            logger = log4net.LogManager.GetLogger(typeof(_Default));

            logger.Debug("Lança a mensagem no nivel de debug");
        }

Essas mensagens são lançadas dentro da janela de Output do Visual Studio, se não tiver o Output aberto vá ao menu View e selecione.

 E nossa saída será exatamente essa: