如何在 Serilog 中使用带有 appSettings 的表达式模板

How to use Expression Template with appSettings in Serilog

我在我的应用程序的 appsettings.json 中配置了一个文件接收器。
它工作得很好,但现在我想添加一个表达式模板来格式化我的文件中的输出。
如我所见,无法使用配置文件设置表达式模板。
如果这不可能,有没有办法对我的文件接收器使用内联配置,但将文件路径保留在配置文件 ?

谢谢

Serilog.Settings.Configuration 的版本 3.3.0 开始,现在可以做到:

{
  "Name": "Console",
  "Args": {
    "formatter": {
      "type": "Serilog.Templates.ExpressionTemplate, Serilog.Expressions",
      "template": "[{@t:HH:mm:ss} {@l:u3} {Coalesce(SourceContext, '<none>')}] {@m}\n{@x}"
    }
  }
}

对于早期版本没有直接支持,但是如果您将模板放入静态 属性 某处:

public static class Formatters
{
    public static ITextFormatter Output { get; } = new ExpressionTemplate(...);
}

然后你可以通过命名静态 属性:

通过 JSON 配置传递该值
{
    "Name": "Console",
    "Args": { "formatter"" "YourApp.Formatters::Output, YourApp" }
}

(检查接收器接受的参数以查看格式化程序参数的名称 - 但在大多数情况下它应该是 formatter。)