Ответ 1
Насколько я знаю, нет способа ограничитьNLog для регистрации всех исключений.
Если вы хотите только зарегистрировать необработанные исключения, вы можете добавить "UnhandledException Handler" в AppDomain при инициализации своего приложения. Обратите внимание, что при некоторых обстоятельствах может быть невозможно зарегистрировать ошибку (например, в случае исключения OutOfMemory или что-то ужасное).
Обратите внимание, что AppDomain также имеет событие FirstChanceException, которое вы можете подписаться, но это будет означать, что вы получите уведомление обо всех возникающих исключениях (и может обрабатываться кодом пользователя) - в этом много.
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
}
Обратите внимание, что это позволит вам регистрировать исключения, которые приводят к сбою вашего приложения, - вы не можете предотвратить его сбой (поэтому имя: необработанное исключение).
Другим вариантом было бы использовать Аспектно-ориентированное программирование (AOP) - и вводить аспект ведения журнала после каждого вызова метода в случае ошибки. Если ваше приложение использует многоуровневую архитектуру, это может быть относительно легко сделать (например, добавить аспект ко всем вызовам уровня вашей бизнес-логики...).
Вы можете найти фреймворк, например PostSharp или Spring.Net полезно (обычно их веб-сайты предоставляют для этого несколько простых примеров).