【问题标题】:Wrapper for Common Logging based on NLog?基于 NLog 的通用日志记录包装器?
【发布时间】:2018-05-07 07:41:43
【问题描述】:

我们希望为 ASP.Net Core Web 应用程序、Azure Functions 和 Web 服务使用通用日志库。 NLog 似乎是一个不错的选择,因为它有多个目标,例如Application Insights 和 Azure 表存储。理想情况下,我想做类似调用 CommonTrace(message) 并拥有该功能

(1) 跟踪其他信息,例如 (a) 环境 - 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 时是否有更好的方法来添加来自多个应用程序的公共信息?

【问题讨论】:

    标签: asp.net-core subclass nlog


    【解决方案1】:

    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-方法):

    https://github.com/AlanBarber/NLog.Targets.Splunk

    【讨论】:

    • 感谢您的回复。 Azure 表存储扩展 (NLog.Extensions.AzureTableStorage) 似乎没有几个日志记录上下文功能(GDC、MDC、NDC)功能 - 但 Application Insights 扩展却有。尽管如此,代码现在将 NLog 直接注入到 ASP.Net Core Web 应用程序中,而不是使用包装器,因为包装器可能隐藏多个功能(stackoverflow.com/questions/3825276/… AND ardalis.com/configure-nlog-with-structuremap
    • @AdrianWarbeck 如果您将JsonLayoutNLog.Extensions.AzureTableStorage 一起使用,那么您可以访问MDC / MDLC。并且还可以将整个 NDC/NDLC-scope 输出为 Json-attribute..
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多