gpt4 book ai didi

c# - NLog.Extensions.Logging 结构化日志

转载 作者:行者123 更新时间:2023-12-05 00:48:13 26 4
gpt4 key购买 nike

我正在尝试使用 NLog 提供程序来登录我的 .net 核心应用程序。我正在使用 GitHub 网站上的示例代码。格式化的日志记录工作得很好,但结构化的日志记录似乎不起作用。我正在使用以下代码来初始化记录器

var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration("nlog.config");

Logger 使用 Microsoft DI 注入(inject)到应用程序中,日志记录语句看起来像,其中 action 是某种复杂类型的实例
_logger.LogInformation("Test {@action}", action);

如果我不使用 Microsoft 日志记录抽象并使用 NLog 日志管理器实例化记录器,结构化日志记录工作正常
NLog.LogManager.LoadConfiguration("nlog.config");
_logger = NLog.LogManager.GetCurrentClassLogger();

如果我将 SeriLog 与 Microsoft 日志记录抽象一起使用,它也可以正常工作。格式化日志和结构化日志都使用以下代码来初始化记录器
loggerFactory.AddSerilog();
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();

这让我想到,唯一可能的解释是 NLog.Extensions.Logging(由 Microsoft 和 NLog 联合提供)还不支持结构化日志记录,尽管 Nlog 支持。我找不到任何信息说它不这样做。

有人可以确认它是否受支持并希望指出一个工作示例吗?

最佳答案

Microsoft Extension Logging 支持结构化日志记录,但不支持 @ 的消息模板规范和 $
NLog 为 ${message} 使用 Microsoft Extension Logging 格式化程序。 ,因为 Microsoft Extension Logging 已经花时间解析和格式化输入模板。

NLog 能够收集日志参数以及 @ 的规范。和 $ .这由 JsonLayout 使用这将自动使用它们对结构化日志记录属性进行正确的 json 序列化(当 MaxRecursionLimit 为 1 或更高时)

关于c# - NLog.Extensions.Logging 结构化日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com