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

标签 c# nlog

有没有办法将 NLog 配置为自动记录我的应用程序可以发送的所有异常?目前,我将转到所有 TRY/CATCH block 并在 CATCH 中手动添加日志记录——但如果我错过了一些怎么办?如果将来有人这样做怎么办

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

最佳答案

据我所知,没有办法限制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) - 并在每次方法调用后引入一个日志记录方面,以防出现错误。如果您的应用程序使用分层架构,这可能相对容易做到(例如,向您的业务逻辑层的所有调用添加一个方面 ...)。

您可能会找到类似 PostSharp 的框架或 Spring.Net很有用(通常他们的网站会为此提供一些简单的示例)。

关于c# - NLog 配置为自动记录所有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895929/

相关文章:

c# - 在批处理结束时检测到不可提交的事务。事务被回滚

c# - 如何检测当前登录用户是否正在运行进程?

c# - 当 C# 程序崩溃时如何知道为什么?

c# - ComboBox 或 ListBox 作为 Form 的索引 - 将其他控件绑定(bind)到 SelectedItem

c# - 如何使用 lambda 表达式创建扩展方法

c# - NLog自定义目标LogCat

vb.net - 如何通过 Nlog 通过电子邮件发送整个日志文件

asp.net - NLog是否可以与customErrors一起使用?

c# - NLog.config 中的 IIS 应用程序名称

c# - 使用 wrapper 时 Nlog Callsite 错误