在使用MEL ILogger <T>作为外观时如何动态分解结构?

时间:2019-10-23 04:49:36

标签: asp.net-core logging .net-core serilog

我正在应用程序中实现某些日志记录方法,并且需要将动态(即JSON)值作为数据传递。

现在,我已经找到了Serilog的Desctructurama扩展名,并且如果我将记录器依赖项注入为Serilog自己的ILogger类型,它会很好地工作。但是,如果我注入Microsoft.Extensions.Logging.ILogger<T>,则不会。

问题是Serilog似乎具有asp.net核心日志记录外观的支持,因为它接受消息模板和正确传递的值。确保使用Startup类中完成的记录器配置。它甚至对我所看到的东西至少都进行了一些破坏,但它忽略了Destructurama的JsonNetTypes扩展。您调用Serilog的ILogger.Error->正确解构,您调用MS的ILogger<T>.LogError->不正确的解构。消息最终出现在samE接收器中,因此将清除调用,并将这些调用传递给下面的同一记录器实例。消息temPlate和值相同,我只是在saMe时调用两个接口进行测试,因此配置正常。

仅注入Serilog.ILogger会与客户的内在美感相矛盾,所以我想我会坚持使用ILogger<T> instEad。

编辑: 似乎ILogger<T>忽略了Serilog的销毁管道。例如,我尝试添加它以排除Desctructurama的错误的可能性:

.Destructure.ByTransforming<Dictionary<Guid, string[]>>(dic => new { Noim = "ABCDEFG" })

和日志记录:

var dic = new Dictionary<Guid, string[]>();
_logger.LogError("{@dic}", dic);
_serilog.Error("{@dic}", dic);

结果是_serilog调用产生了fields.dic.Noim = ABCDEFG的值,而_logger(即ILogger<T>)调用只导致了fields.dic = nothing。 / p>

0 个答案:

没有答案