2010-03-09 13 views
9

Come si registra l'eccezione interna con Log4NET?Registrazione InnerException tramite Log4Net

Questo è il mio attuale modello di conversione:

<conversionPattern value="%date [%appdomain] %-5level %logger [%property{NDC}] - %message%newline" /> 
+1

Solo una nota: http://logging.apache.org/log4net/release/sdk/log4net.NDC.html NDC è deprecato . Ho usato con successo 'log4net.ThreadContext.Properties [" propertyName "]' invece. Il tuo modello di conversione sarebbe qualcosa come '% property {propertyName}' reference: http: //logging.apache.org/log4net/release/sdk/log4net.NDC.html – ram

risposta

7

Console e File appenders stampare automaticamente l'eccezione. L'eccezione: messaggio, traccia dello stack e tutte le eccezioni interne (di nuovo con traccia dello stack) vengono registrate su linee separate e non seguono il modello di conversione.

Non sono nemmeno sicuro di poter configurare log4net per non stamparlo.

Aggiornamento: E 'possibile configurare l'appender di non stampare lo stacktrace: Log4Net - Logging out the Exception stacktrace only for certain files

+0

Ciao Stefan, puoi indicarmi un riferimento entrata in SDK confermando ciò che hai risposto? – Raj

+0

Non l'ho letto da nessuna parte. Questo è ciò che vedo nei miei file di registro o sulla console quando utilizzo log4net. Le eccezioni interne vengono sempre stampate. –

+1

Non so perché, ma vedo nel mio file di registro la cosa opposta - l'eccezione interna non viene registrata affatto. – VikciaR

1

Dopo qualche rapido googling, ho trovato qualcun altro che aveva a similar problem. La soluzione di Freddy Gómez era:

È possibile implementare un renderer (una classe che implementa l'interfaccia IObjectRenderer) per la vostra eccezione e mettere le informazioni che volete su l'eccezione. Quindi, devi solo aggiungere un elemento al file di configurazione.

+0

Le altre soluzioni nello stesso thread a cui ho fatto riferimento includevano l'analisi dell'eccezione e includevano informazioni aggiuntive nel Messaggio stesso.

9

% eccezione

una forma formattata dell'oggetto eccezione nella voce di registro, se la voce contiene un'eccezione; In caso contrario, questa espressione formato non aggiunge nulla alla voce di registro

Riferimento: metodo di utilizzare l'ILog.Error(): http://www.beefycode.com/post/Log4Net-Tutorial-pt-4-Layouts-and-Patterns.aspx

Credo che la vostra eccezione conterrebbe l'eccezione interna:

Edit invece di ILog.ErrorFormat(). Come da documentation, ErrorFormat() non accetta un oggetto Exception da includere nell'evento di registro

+0

+1 per aver menzionato che ErrorFormat non accetta un'eccezione. Questo è quello di cui avevo bisogno. –

-1

È appena riuscito a verificarlo nel codice sorgente per Log4Net versione 2.0 e posso vedere che non vi è alcuna considerazione per la registrazione di InnerException. Questo è l'attuale limite di Log4Net (versione 2) che non supporta il rendering di InnerException out of the box. È per questo che si dovrebbe iniziare a utilizzare NLog come è incorporato il supporto per il rendering InnerException - link

Problemi correlati