Serilog SourceContext class name only via appsettings.json only approach

Serilog SourceContext class name only via appsettings.json only approach

我正在为我的 Blazor(服务器)项目使用 Serilog ASP.NET 核心,我通过 appsettings.json 配置记录器,这就是我的输出模板的样子:

"[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u4}] ] [{SourceContext}] {Message:lj}{NewLine}{Exception}"

我使用 builder.Host.UseSerilog() 将其添加到应用程序中,并使用 ILogger 将其注入到我的组件中。

我想要的是仅显示 class 名称 而不是像 [=16] 那样显示完整的程序集+class 名称=].

可能吗?

这个我已经试过了:

此后记录器的配置 (appsettings.json) 不起作用。

另一个问题有一个基于代码的方法,而我更喜欢通过 appsettings.json.

的配置。

您可以通过 ExpressionTemplate.

应用表达式

Serilogs GitHub 页面显示 recipe 仅记录类型名称,没有命名空间。

Trim down SourceContext to a type name only:

Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)

This expression takes advantage of LastIndexOf() returning -1 when no . character appears in SourceContext, to yield a startIndex of 0 in that case.


您的 appsettings.json 配置必须指定使用 ExpressionTemplate。对于如下所示的 Console 记录器。

"Serilog": {
  "MinimumLevel": {
    "Default": "Debug",
  },
  "WriteTo": [
    {
      "Name": "Console",
      "Args": {
        "formatter": {
          "type": "Serilog.Templates.ExpressionTemplate, Serilog.Expressions",
          "template": "{@t:HH:mm:ss} - {@l:u} - {Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)}: {@m}\n{@x}"
        }
      }
    }
  ]
}

请注意,从版本 3.3.0 开始,您需要包含 NuGet 个包 Serilog.Expressions and Serilog.Settings.Configuration

<PackageReference Include="Serilog.Expressions" Version="3.3.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />