我正在尝试使用NLog提供程序来登录我的.net核心应用程序。我正在使用GitHub网站上的示例代码。格式化的日志记录工作得很好,但结构化日志似乎不起作用。我使用以下代码初始化记录器
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration("nlog.config");使用Microsoft DI将记录器注入应用程序,日志记录语句如下所示,其中操作是某种复杂类型的实例。
_logger.LogInformation("Test {@action}", action);如果我不使用Microsoft日志抽象并使用NLog日志管理器实例化记录器,则结构化日志记录可以正常工作。
NLog.LogManager.LoadConfiguration("nlog.config");
_logger = NLog.LogManager.GetCurrentClassLogger();如果我在Microsoft抽象中使用SeriLog,它也可以正常工作。格式化日志和结构化日志都使用以下代码初始化记录器
loggerFactory.AddSerilog();
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateLogger();这让我想到,唯一可能的解释是NLog.Extensions.Logging (由微软和Nlog联合提供)还不支持结构化日志,尽管Nlog支持。我找不到任何信息说它做不到。
是否有人能确认它是否被支持,并希望指出一个有用的例子?
发布于 2018-05-01 23:28:33
支持结构化日志记录,但不支持@和$的消息板规范。
NLog为${message}使用了Microsoft扩展日志记录格式化程序,因为Microsoft扩展日志记录已经在解析和格式化输入模板上花费了时间。
NLog能够获取测井参数以及@和$的规范。这由JsonLayout使用,它将自动使用它们来正确地对结构化日志属性进行json序列化(当MaxRecursionLimit为1或更高时)。
https://stackoverflow.com/questions/50114822
复制相似问题