NLog配置为自动记录所有异常?

问题描述 投票:12回答:2

有没有办法配置NLog自动记录我的应用程序可以发送的所有异常?目前我将去所有TRY / CATCH块并在CATCH中手动添加日志记录 - 但如果我错过了一些怎么办?如果将来其他人做了什么呢?

有没有办法告诉NLog始终记录所有异常?特别是一些没有被捕获并可能导致弹出窗口?

c# nlog
2个回答
17
投票

据我所知,没有办法限制NLog记录所有异常。

如果您只想记录未处理的异常,则可以在初始化应用程序时向AppDomain添加“UnhandledException Handler”。请注意,在某些情况下,可能无法记录错误(例如,在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) - 并在每次方法调用后引入一个Logging方面,以防出现错误。如果您的应用程序使用分层架构,这可能相对容易(例如,为业务逻辑层的所有调用添加一个方面......)。

你可能会发现像PostSharpSpring.Net这样的框架很有用(通常他们的网站提供了一些简单的例子)。


2
投票

对于Web Api应用程序,您可以在qazxsw中执行此操作

Global.asax.cs

protected void Application_Error() { Exception lastException = Server.GetLastError(); NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); logger.Fatal(lastException); }

© www.soinside.com 2019 - 2024. All rights reserved.