Uno Issue un pò frettoloso, che oggi forse riesco ad uscire prima delle 9 di sera :)

Mi è capitato di configurare Log4Net in un ambiente che aveva già un logger (che però non funzionava :)) e per evitare di modificare tutte le pagine, ho tenuto la struttura e la severity del Logger esistente levando tutta la logica e chiamando log4Net.
Ho avuto il problema che tutti gli errori mi venivano ovviamente segnalati come partiti dal logger... .(

Un paio di ricerche sull'utilizzo di StackTrace ed ho trovato il metodo perfetto:

Type type = new StackTrace().GetFrame(1).GetMethod().DeclaringType;

Quindi passerò al GetLogger di log4net questo tipo!

Attenzione: andando in debug, possono venire aggiunti dei frame tra la chiamata del metodo e l'effettivo log, perchè se io interrogo per esempio il type con il debugger di visual studio, questo tramite reflection ne invoca proprietà e metodi e crea un frame in mezzo che ovviamente sballa la gerarchia!

Update:

Come giustamente fa notare Massimo: e se il metodo viene sottoposto ad inlining?

A parte il post di Raf citato da Massimo, un pò fuori dal mondo :P... le soluzioni possibili che vedo sono due:

1: Decorare il metodo con l'attributo [MethodImpl(MethodImplOptions.NonInlining)]
2: Fare il metodo Virtual. Se non erro, il Jit non può fare inlinint di un metodo Virtual (l'avevo letto da qualche parte :))

Non so quanto queste siano percorribili cmq :)