quarta-feira, 28 de abril de 2010

Como criar um CustomTraceListener ?


O EnterpriseLibrary, além de disponibilizar algumas formas padrão para log, nos permite criar uma customização do TraceListener.

Neste post vou mostrar como criar um CustomTraceListener para logar as informações.

 Para modificar o modo com que sua classe gravará as informações basta modificar o método "WriteLine()" e/ou "Write()" inserindo o código para gravar em banco de dados, arquivo, Event Viewer, e-mail ou seja lá qual for sua vontade.


Criando o MyCustomTraceListener

  • Adicione uma nova classe chamada "MyCustomTraceListener" ao seu projeto.
  • Especifique que a classe deriva "CustomTraceListener".
  • Adicione o atributo de classe "ConfigurationElementType" . Especifique o tipo "CustomTraceListenerData" como o parâmetro de atributo.

[ConfigurationElementType(typeof(CustomTraceListenerData))]
    public class MyCustomTraceListener : CustomTraceListener

  • Sobrescreva o método "TraceData" da classe "CustomTraceListener". Este método é que será chamado pelo EntLib na hora de realizar o trace nos objetos de log.

public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
        {
            if (data is LogEntry && this.Formatter != null)
            {
                this.WriteLine(this.Formatter.Format(data as LogEntry));
            }
            else
            {
                this.WriteLine(data.ToString());
            }
        }
  • Sobrescreva os métodos "Write" e "WriteLine". Estes métodos serão chamados pelo seu TraceData, neles é que você deverá implementar o modo com que deseja salvar os logs de sua aplicação.



public override void Write(string message)
        {
            //implementação do modo de log
        }



public override void WriteLine(string message)
        {
            //implementação do modo de log
        }


Pronto, seu CustomTraceListener está criado. Para utilizá-lo basta adicionar este projeto a sua solução e depois criar um novo TraceListener, adicionando como Type  o MyCustomTraceListener.

Nenhum comentário:

Postar um comentário