asp.net-core - 基于 NLog 的通用日志记录包装器?
问题描述
我们希望为 ASP.Net Core Web 应用程序、Azure Functions 和 Web 服务使用一个通用的日志库。NLog 似乎是一个不错的选择,因为它有多个目标,例如 Application Insights 和 Azure 表存储。理想情况下,我想做类似 call CommonTrace(message)的事情并拥有该功能
(1) 跟踪其他信息,例如 (a) Environment - DEV、TEST、PROD;(b) 本地时间,(c) System.Runtime.CompilerServices.CallerLineNumber (d) 调用应用程序等。
(2)调用NLog写出消息等信息。请注意,其他信息可能会附加到消息中或以其他方式保留。
但是当我了解更多关于 NLog 和 ASP.NET Core 的信息时,似乎如果一个人天真地创建一个基本的包装类来添加额外的信息,一个人可能会失去很多功能,例如访问 NLog 和 Microsoft 的调用站点和标头信息。 Extensions.Logging 提供。
那么,是否可以将 NLog 完全子类化,然后使用该包装器,因为通常将 NLog 与 ASP.Net Core 一起使用。或者在使用 NLog 时是否有更好的方法来添加来自多个应用程序的公共信息?
解决方案
NLog 具有捕获大量上下文属性的能力,而无需将它们直接注入日志操作。
它们由为 NLog 目标配置的布局自动捕获。一些 NLog 目标允许添加任意数量的属性。
这可以通过 NLog Application Insight Target(版本 2.6.4)看到,它现在能够添加一个(或多个)“ContextProperty”元素。这些将自动作为元数据包含在每个日志操作中:
https://github.com/Microsoft/ApplicationInsights-dotnet-logging/pull/183
如果 NLog 目标不支持 ContextProperty,那么也可以转向 NLog JsonLayout,它允许添加元数据作为附加的 Json-Attributes:
https://github.com/NLog/NLog/wiki/JsonLayout
如果您最喜欢的自定义 NLog 目标支持结构化日志记录属性,那么添加对 ContextProperty-elements 的支持应该是一个小改动(简单的方法是从 NLog TargetWithContext 继承并使用GetAllProperties
-method):
推荐阅读
- pandas - .apply() 中填充 nan 值的条件语句不起作用
- android - 如何在 Recycler View GridLayout 中更改跨度大小期间显示进度条?
- angular - 将可本地化的文本文件添加到 Angular
- google-apps-script - 从谷歌表格打开谷歌/任何其他搜索引擎标签
- excel - 64 位声明,PrtSafe?
- ios - iOS/Swift Core 数据合并冲突
- database - 为我的 NoSql 数据库模式建模时的注意事项
- python - 有没有更有效的方法在 Dataframe 中的每一行上带来特定值的总 .count() 值?(不合并,最好使用 lambda)
- javascript - 如何通过 jQuery 获取新的附加元素?
- javascript - 如何在 vue 项目中预加载图片