Per quanto ne so, non c'è modo di limitareNLog per registrare tutte le eccezioni.
Se invece si è interessati per accedere eccezioni non gestite, è possibile aggiungere un "UnhandledException Handler" per il dominio di applicazione durante l'inizializzazione dell'applicazione. Si noti che in alcune circostanze potrebbe non essere possibile registrare l'errore (ad esempio in caso di un'eccezione OutOfMemory o qualcosa di terribile).
Si noti che il dominio di applicazione ha anche un evento FirstChanceException è possibile sottoscrivere, ma questo significherebbe che da cui ricevi notifiche ogni eccezione che si verifica (e potrebbe essere gestita dal codice utente) - in questo sono molti.
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomain_CurrentDomain_UnhandledException);
static void AppDomain_CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// use logger here to log the events exception object
// before the application quits
}
Si noti che questo sarà solo la richiesta di login eccezioni che causano l'applicazione per incidente - non si può impedire il crash (quindi il nome: un'eccezione non gestita).
Un'altra opzione sarebbe quella di utilizzare Aspect Oriented Programming (AOP) - e introdurre un aspetto di registrazione dopo ogni chiamata di metodo, in caso di errore. Se l'applicazione utilizza un'architettura a livelli, questa operazione potrebbe essere relativamente semplice (ad esempio, aggiungere un aspetto a a tutte le chiamate del livello della logica aziendale ...).
È possibile trovare un quadro come PostSharp o Spring.Net utile (in genere i loro siti Web forniscono alcuni esempi facili per questo).
fonte
2012-12-15 20:58:13
Qual è la portata di questo AppDomain? Otterrà tutte le eccezioni non gestite nel mio progetto o solo per classe? Inoltre, faccio riferimento a qualche DLL e cosa ne è dell'eccezione? Devo aggiungere questo codice a ciascuna DLL (che sono i propri progetti)? – JSchwartz
Un Appdomain è un concetto .net per definire un limite isolato per un'applicazione. Se si crea un'applicazione Console, questa verrà eseguita all'interno di un AppDomain. Tutti gli assembly richiesti verranno caricati nello stesso AppDomain. Se qualcosa accade all'interno dell'applicazione (indipendentemente dall'assemblaggio) si verificherà nella stessa appdomain. Solitamente il codice di esempio viene inserito una sola volta all'inizio dell'applicazione (ad esempio nel metodo Main della tua app o in caso di una WebApp in global.asax nel metodo application_start). vedere http://msdn.microsoft.com/en-us/library/system.appdomain.aspx –