asp.net Serilog SourceContext类名称仅通过appsettings.json方法

qhhrdooz  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(136)

我在我的Blazor(服务器)项目中使用Serilog ASP.NET Core,我通过appsettings.json配置日志记录器,这是我的输出模板的样子:

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

我使用builder.Host.UseSerilog()将其添加到应用程序中,并使用ILogger将其注入到我的组件中。
我想要的是只显示类名,而不是像{SourceContext}那样显示完整的程序集+类名。
有可能吗?
我已经试过这个了:serilog format SourceContext for showing only assembly name
在此之后,日志记录器(appsettings.json)的配置不起作用。
另一个问题有一个基于代码的方法,而我更喜欢通过appsettings.json的配置。

oyjwcjzk

oyjwcjzk1#

您可以通过ExpressionTemplate应用表达式。
Serilogs GitHub页面显示了一个只记录类型名称而不记录命名空间的方法。
SourceContext修剪为仅一个类型名称:

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

这个表达式利用了LastIndexOf()在no时返回-1的优点。字符,在这种情况下产生的startIndex为0。
您的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版开始,您需要包含NuGetSerilog.ExpressionsSerilog.Settings.Configuration

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

相关问题