Use a magia do C # para transformar qualquer classe em classe com reconhecimento de log

Este código parece familiar para você?

namespace MyNamespace
{
public class MyClass
{
private static Logger logger = LogManager.GetCurrentClassLogger();
}
}

Para criar um logger, você deve acessar um LogManager estático que retorna um logger para sua classe. Isso deixará o código chato e repetitivo em todos os lugares e praticamente o mesmo para qualquer estrutura de registro por aí.

Alguém poderia dizer: Não no meu caso, eu tenho uma classe base para isso – que pode ser parecida com esta

namespace MyNamespace
{
public class MyBase
{
public Logger GetLogger()
{
return LogManager.GetLogger(this.GetType());
}
}
}

Isso ajuda em alguns casos em que você controla a classe base. Mas e se você precisar derivar de uma classe de terceiros? Bem, então você provavelmente está de volta à abordagem estática.

E se eu te disser que isso está para mudar?

Vejamos o seguinte trecho de código

public interface ILogAware { }

Bem, isso não parece emocionante, não é? Parece mais com nada.
Mas e se eu adicionar o código a seguir?

public static LogAwareExtensions 
{
public static void LogDebug(this ILogAware logAware, string format, params object[] args)
{
var logger = LogManager.GetLogger(logAware.GetType());
logger
.Debug(format, args);
}
}

De repente, não transformamos nada em uma ferramenta poderosa que adiciona capacidade de registro a qualquer uma de suas classes apenas implementando ILogAware – uma interface vazia – então nada precisa ser implementado.

Isso é o que chamo de magia c #.

Espero que ajude!