我目前正在使用Serilog,我希望能够将一个类传递给记录器并让它在输出到文本文件之前以自定义格式登录。与IFormatProvider有些相似。我也找到ITextFormatter
,但我不确定这是否是正确的实施方式。我想要一个定制水槽吗?
答案 0 :(得分:4)
对于原始类型,直接使用Serilog supports IFormatProvider
。
然而,大多数用户定义的引用类型不会被Serilog直接传递给接收器。这是因为接收器经常以异步方式运行,而Serilog不能假设任意用户定义的类型是线程安全的。
您可以通过将类型的值捕获为“标量”来规避此问题,以便使用IFormatProvider
:
.Destructure.AsScalar<SomeClass>()
或者,或者,您可以将类“解构”为您在记录时所需的任何辅助表示:
.Destructure.ByTransforming<SomeClass>(sc => Display(sc))
要使此(ByTransforming()
)生效,您需要在记录对象时选择@
:
Log.Information("Hello {@Something}", new SomeClass());
最简单的是,您也可以在类本身中覆盖ToString()
。