基于NLog的通用日志包装器?

时间:2018-05-07 07:41:44

标签: asp.net-core subclass nlog

我们希望为ASP.Net Core Web应用程序,Azure功能和Web服务使用通用日志记录库。 NLog似乎是一个很好的选择,因为它有多个目标,例如应用程序见解和Azure表存储。理想情况下,我想做一些事情,如调用 CommonTrace(消息)并具有该功能

(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时,是否有更好的方法可以从多个应用程序中添加公共信息?

1 个答案:

答案 0 :(得分:2)

NLog能够捕获大量的上下文属性,而无需直接注入日志操作。

它们由为NLog-target配置的布局自动捕获。一些NLog目标允许添加任意数量的属性。

这可以通过NLog Application Insight Target(版本2.6.4)看到,它现在能够添加一个(或多个)" ContextProperty" -elements。这些将自动包含在每个日志操作的元数据中:

https://github.com/Microsoft/ApplicationInsights-dotnet-logging/pull/183

如果NLog目标不支持ContextProperty,那么也可以转向NLog JsonLayout,它允许一个添加元数据作为额外的Json-Attributes:

https://github.com/NLog/NLog/wiki/JsonLayout

如果您最喜欢的自定义NLog目标支持结构化日志记录属性,那么添加对ContextProperty元素的支持应该是一个小改动(简单方法是从NLog TargetWithContext继承并只使用GetAllProperties - 方法):< / p>

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