2011-04-18 16 views
6

Ho una classe che sta registrando da un metodo anonimo. Ho dumbed giù per fare il punto ...Posso ottenere log4net per aggiungere il nome della classe reale e non il nome della classe di chiusura generata?

public class SocketFlusher 
{ 
    private static readonly ILog Log = LogManager.GetLogger(typeof(SocketFlusher)); 

    public void Flush() 
    { 
     Wait.For(timeout,() => 
     { 
      ... // work 
      Log.DebugFormat("{0} bytes available", socket.Available); 
     } 
    } 
} 

La mia configurazione log4net è buono (ho controllato l'uscita log4net debug="true" e l'appender fa di lavoro). Il mio layout di appender è

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-4thread] %-5level %class{1} - %message%newline"/> 
    </layout> 

Ma, il mio output di registro ha quella classe statica generata automaticamente pazza in esso.

2011-03-21 18:10:20,053 [5 ] DEBUG SocketFlusher+<>c__DisplayClass1 - 82 bytes available 

lo voglio dire SocketFlusher, qual è il layout appender giusto per ottenere questo formato?

risposta

8

Si desidera che il nome classe venga visualizzato nell'output dell'appender. E si sta seguendo l'idioma log4net di chiamare il vostro logger il nome della classe ...

private static readonly ILog Log = LogManager.GetLogger(typeof($CLASSNAME$)); 

Che cosa si vuole fare nel modello di layout appender è quello di includere il modello %logger nome invece del modello %class.

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-4thread] %-5level %logger{1} - %message%newline"/> 
</layout> 
Problemi correlati