Ieri ho parlato di Log4PostSharp come ottimo compagno di viaggio per la scrittura del tracing. Un paio di note per districarsi meglio nella giungla.
Magagna…
Se scaricate Log4PostSharp e cercate di usarlo non va, vi beccate un simpatico errore di compilazione… per qualche strano motivo l’autore ha compilato i suoi assembly utilizzando una reference ad una versione specifica di PostSharp, la 1.0, mentre tipicamente voi potreste avere la 1.0sp1. Nulla di grave:
  1. Scaricatevi i sorgenti dal repository svn di Google (io uso RapidSVN)
  2. Aprite la solution;
  3. Rimuovete le reference a PostSharp.*.dll;
  4. Rimettetele con quelle che avete voi, di default Visual Studio mette Specific Version “false”;
  5. Ricompilate e va tutto che è un piacere;
Mania compulsiva da Beta ;-)
Non fatevi prendere dalla tentazione di ricompilare il tutto per PostSharp 1.5 RC1 perchè compilare compila ma poi non va un bel nulla… causa cambi radicali nel modello di reflection utilizzato da PostSharp. PostSharp infatti utilizza un suo sistema di Reflection al fine di evitare di caricare l’assembly che sta analizzando.
Tip & Tricks
Una necessità a cui potreste andare incontro è quella di avere accesso allo stesso “logger” che state usando con Log4PostSharp ad esempio perchè durante l’esecuzione di un metodo avete bisogno di loggare informazioni in più.
Nulla di più facile, anche grazie a come funziona log4net, avete sempre il vostro bel metodo:
static void Main( string[] args )
{
    var p = new Person();
    p.FirstName = "Mauro";
    p.LastName = "Servienti";

    var x = p.Echo( p );

    Console.WriteLine( x );
    Console.Read();
}
e il prodotto della compilazione è:
image
Quello che potete fare è pressochè la stessa cosa che fa Log4PostSharp:
var logger = LogManager.GetLogger( typeof( Program ) );

var p = new Person();
p.FirstName = "Mauro";
p.LastName = "Servienti";

logger.Debug( "My message..." );

var x = p.Echo( p );

Console.WriteLine( x );
Console.Read();
Recuperate una reference allo stesso logger utilizzato da Log4PostSharp, con il risultato atteso:
image
.m