我正在 VS 2019 中开发 WPF .Net 项目,而不是 .Net Core。我想要记录异常。我对此有一些疑问:
我将不胜感激详细的解释和样品。
谢谢
我可以将 Serilog 添加到此类应用程序中吗?
我想你的意思是问“我可以将 Serilog 添加到 WPF 项目吗?” 答案是“是”。
我需要选择安装什么 Serilog 软件包?在 VS 的 NuGet Packager Manager 中我发现了一堆 Serilog 包。
阅读文档。每个包都有特定的用途,它们 相应的 自述 文件会让您知道是否需要它们。
那是多层架构项目。Serilog必须安装在哪一层?在数据层还是UI层?
“多层架构项目”不是一个描述性术语:每个编写得当的重要项目都有层。
Serilog 支持不同风格的用例:
在我看来以及(据我所知)Serilog 维护者的意见中,最好的风格是使用serilog-extensions-logging:
Microsoft.Extensions.DependencyInjection- 您可以使用其他容器,但如果您是 DI 新手,那么您应该使用 DI 容器Microsoft.Extensions.DependencyInjection)。Microsoft.Extensions.Logging和Microsoft.Extensions.Logging.Abstractions。Serilogand Serilog.Extensions.Logging- 这使您可以使用 Serilog 作为Microsoft.Extensions.Logging. 您应该避免在应用程序代码中直接使用 Serilog,而是通过执行所有日志记录Microsoft.Extensions.Logging.ILogger(不要与 Serilog 混淆Serilog.ILogger!)。serilog-extensions-logging 请阅读他们的文档。请注意,虽然很多文档都引用了 .NET Core,但事实是,只要您有 和Microsoft.Extensions.DependencyInjection包可以正常Microsoft.Extensions.Logging工作,您就可以将它与 .NET Framework 4.7.2 项目一起使用。但 Serilog 还支持其全局静态Serilog.Logger.Log对象属性,允许任何地方的任何代码记录数据。
如何设置、配置和使用Serilog?
如何全局配置 Serilog 以捕获异常并将其从任何形式的解决方案记录到文件或数据库?
这取决于您的应用程序的项目平台。Serilog确实有 NuGet 包,可以为特定平台设置全局异常日志记录,但在我看来,您不应该只让 Serilog 为您处理它而不执行其他任何操作。仅仅因为 Serilog 会记录未捕获的异常并不意味着您不应该自己对其采取行动。
也就是说,特别是在 WPF 中,您需要处理两个事件:
AppDomain.UnhandledException
Application.DispatcherUnhandledException。
请注意,WPF 有很多非致命错误和警告的运行时报告(例如视图模型绑定的问题,根据您的应用程序的设计,这可能是例外,也可能不是例外),在这种情况下,您需要实现TraceListener并记录Serilog 自己有什么值得注意的事情。