首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLog.Extensions.Logging结构化日志

NLog.Extensions.Logging结构化日志
EN

Stack Overflow用户
提问于 2018-05-01 10:19:39
回答 1查看 3.1K关注 0票数 4

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

代码语言:javascript
复制
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration("nlog.config");

使用Microsoft DI将记录器注入应用程序,日志记录语句如下所示,其中操作是某种复杂类型的实例。

代码语言:javascript
复制
_logger.LogInformation("Test {@action}", action);

如果我不使用Microsoft日志抽象并使用NLog日志管理器实例化记录器,则结构化日志记录可以正常工作。

代码语言:javascript
复制
NLog.LogManager.LoadConfiguration("nlog.config");
_logger = NLog.LogManager.GetCurrentClassLogger();

如果我在Microsoft抽象中使用SeriLog,它也可以正常工作。格式化日志和结构化日志都使用以下代码初始化记录器

代码语言:javascript
复制
loggerFactory.AddSerilog();
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();

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

是否有人能确认它是否被支持,并希望指出一个有用的例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-01 23:28:33

支持结构化日志记录,但不支持@$的消息板规范。

NLog为${message}使用了Microsoft扩展日志记录格式化程序,因为Microsoft扩展日志记录已经在解析和格式化输入模板上花费了时间。

NLog能够获取测井参数以及@$的规范。这由JsonLayout使用,它将自动使用它们来正确地对结构化日志属性进行json序列化(当MaxRecursionLimit为1或更高时)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50114822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档