我正在应用程序中实现某些日志记录方法,并且需要将动态(即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>