【问题标题】:Custom Formatting for a class类的自定义格式
【发布时间】:2016-10-23 18:15:05
【问题描述】:

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

【问题讨论】:

    标签: serilog


    【解决方案1】:

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

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

    您可以通过将类型的值捕获为“标量”来规避这一点,以便使用IFormatProvider

    .Destructure.AsScalar<SomeClass>()
    

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

    .Destructure.ByTransforming<SomeClass>(sc => Display(sc))
    

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

    Log.Information("Hello {@Something}", new SomeClass());
    

    最简单的是,您也可以在类本身中覆盖ToString()

    【讨论】:

    • 只是一个后续问题;如果我想使用解构示例或覆盖 ToString,我仍然只需使用 log.Error("{myObj}", myObj); 将我的对象添加到我的日志中。我应该看到我期望的输出?
    • 是的,就是这样。
    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2011-08-15
    相关资源
    最近更新 更多