Chi mi chiama?

Quando dobbiamo scrivere nel log le informazioni di un errore è comodo specificare oltre al classico messaggio e momento dell’esecuzione, il nome della classe e del metodo che hanno generato l’errore.

Di fronte a questa esigenza e evidenziata la mia pigrizia che mi spingeva a non ripetere ad ogni chiamata la scrittura della stringa “classe.metodo” mi sono messo alla ricerca di un modo più semplice per gestire il meccanismo.

La risposta l’ho trovata nella classe StackFrame che permette di estrarre informazioni dallo stack, risalendo n livelli fino a quello del chiamante:

   1: public void Error(Exception ex)
   2: {
   3:     StackFrame sf = new StackFrame(1);
   4:     _log.Error(
   5:         String.Concat(sf.GetMethod().DeclaringType.FullName, ".", sf.GetMethod().Name), 
   6:         ex.Message);            
   7: }

Dal metodo di log risalgo lo stack di un livello per arrivare al chiamante e da questo recupero il metodo e il nome della classe.

La classe StackFrame mi da molto di più, mi permette ad esempio di sapere anche quale riga di codice ha effettuato la chiamata e qual’è il nome del file che contiene la definizione della classe.

Forse per molti questa non è una grossa novità, ma cercando tra le classi del Fx si scopre sempre qualcosa di nuovo anche se la classe StackFrame è presente già dalla versione 1.0.

Technorati Tags: ,

Print | posted on Saturday, April 18, 2009 9:23 AM