Serilog 表达式中的多个条件分支

Multiple conditional branches in Serilog expression

我们已经开始使用 Serilog 为我们的应用程序生成结构日志。使用 Serilog Expressions 我们已经能够生成以下 JSON,就日志记录而言,这非常酷。

{
    "@t": "2022-02-11T15:57:57.6087361+01:00",
    "@m": "GET Request received on API endpoint /foo",
    "@l": "Info",
    "SourceContext": "Company.API.FooController",
    "ActionId": "bd248542-138b-4053-9d50-b9e62e0ab1fd",
    "ActionName": "Company.API.FooController.GetFoo (Company.API)",
    "RequestId": "0HMFDDRDSMUUI:00000001",
    "RequestPath": "/foo",
    "SpanId": "|85c9c2db-489a260ce2c6915e.",
    "TraceId": "85c9c2db-489a260ce2c6915e",
    "ParentId": "",
    "ConnectionId": "0HMFDDRDSMUUI",
    "ThreadId": 7,
    "ContextFieldA": "ValueA",
    "ContextFieldB": "ValueA"
}

这些日志事件是使用从环境变量中读取的以下表达式生成的:

"{ {@t, @m, @r, @l: if @l = 'Information' then 'Info' else @l, @x, ..@p} }\n"

但是我们也想将其他日志级别映射到简写。例如 WarningWarn 等。我们如何向这个表达式添加多个 if-else 分支?

其实答案出奇的简单。可以完全按照预期完成多个分支:

"{ {@t, @m, @r, @l: if @l = 'Information' then 'Info' 
    else if @l = 'Warning' then 'Warn' else @l, @x, ..@p} }\n"