基于 NLog 的通用日志记录包装器?
Wrapper for Common Logging based on NLog?
我们想为 ASP.Net 核心 Web 应用程序、Azure Functions 和 Web 服务使用通用日志记录库。 NLog 似乎是一个不错的选择,因为它有多个目标,例如Application Insights 和 Azure Table 存储。理想情况下,我想做一些事情,比如调用 CommonTrace(message) 并具有该功能
(1) 跟踪其他信息,例如 (a) 环境 - DEV、TEST、PROD; (b) 当地时间,(c) System.Runtime.CompilerServices.CallerLineNumber (d) 调用应用等
(2)调用NLog写出消息等信息。请注意,其他信息 可能会添加到消息之前或以其他方式保留。
但是随着我对 NLog 和 ASP.NET Core 的了解越来越多,似乎如果天真地创建一个基本的包装器 class 来添加额外的信息,那么可能会失去很多功能,例如访问 NLog 和 Microsoft.Extensions.Logging 提供的调用站点和 header 信息。
那么,是否可以完全子class 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-属性:
https://github.com/NLog/NLog/wiki/JsonLayout
如果您最喜欢的自定义 NLog 目标支持结构化日志记录属性,那么添加对 ContextProperty 元素的支持应该是一个小改动(简单的方法是继承 NLog TargetWithContext 并仅使用 GetAllProperties
方法) :
我们想为 ASP.Net 核心 Web 应用程序、Azure Functions 和 Web 服务使用通用日志记录库。 NLog 似乎是一个不错的选择,因为它有多个目标,例如Application Insights 和 Azure Table 存储。理想情况下,我想做一些事情,比如调用 CommonTrace(message) 并具有该功能
(1) 跟踪其他信息,例如 (a) 环境 - DEV、TEST、PROD; (b) 当地时间,(c) System.Runtime.CompilerServices.CallerLineNumber (d) 调用应用等
(2)调用NLog写出消息等信息。请注意,其他信息 可能会添加到消息之前或以其他方式保留。
但是随着我对 NLog 和 ASP.NET Core 的了解越来越多,似乎如果天真地创建一个基本的包装器 class 来添加额外的信息,那么可能会失去很多功能,例如访问 NLog 和 Microsoft.Extensions.Logging 提供的调用站点和 header 信息。
那么,是否可以完全子class 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-属性:
https://github.com/NLog/NLog/wiki/JsonLayout
如果您最喜欢的自定义 NLog 目标支持结构化日志记录属性,那么添加对 ContextProperty 元素的支持应该是一个小改动(简单的方法是继承 NLog TargetWithContext 并仅使用 GetAllProperties
方法) :