类的自定义格式

Que*_*ing 2 serilog

我当前正在使用 Serilog,我希望能够将一个类传递给记录器并让它在输出到文本文件之前以自定义格式记录。有点类似于IFormatProvider。我也发现了ITextFormatter,但我不确定这是否是正确的实施方式。我想要一个定制水槽吗?

Nic*_*rdt 6

对于原始类型,Serilog直接支持。IFormatProvider

然而,大多数用户定义的引用类型不会由 Serilog 直接传递到接收器。这是因为接收器通常异步操作,并且 Serilog 不能假设任意用户定义类型是线程安全的。

IFormatProvider您可以通过将类型的值捕获为“标量”来规避此问题,以便使用, :

.Destructure.AsScalar<SomeClass>()
Run Code Online (Sandbox Code Playgroud)

或者,您可以将类“解构”为您在记录时想要的任何辅助表示形式:

.Destructure.ByTransforming<SomeClass>(sc => Display(sc))
Run Code Online (Sandbox Code Playgroud)

要使此 ( ) 起作用,您需要在记录对象时ByTransforming()选择加入:@

Log.Information("Hello {@Something}", new SomeClass());
Run Code Online (Sandbox Code Playgroud)

最简单的是,您也可以ToString()在类本身中进行重写。