代码之家  ›  专栏  ›  技术社区  ›  Mohammed Noureldin Reedwanul Islam

Serilog JSON配置中的“使用”功能是什么?

  •  0
  • Mohammed Noureldin Reedwanul Islam  · 技术社区  · 7 年前

    实际上是什么 Using 是否在Serilog JSON配置中(例如在.Net核心环境中的AppSettings.JSON文件中)执行此操作?

    让我们以这种配置为例:

    "Serilog": {
      "Using": [ "Serilog.Sinks.Console" ], <=======***HERE***=========
      "MinimumLevel": "Debug",
      "WriteTo": [
        { "Name": "Console" },
        {
          "Name": "RollingFile",
          "Args": {
            "pathFormat": "logs\\log-{Date}.txt",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
          }
        }
      ],
      "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
      "Properties": {
        "Application": "My Application"
      }
    }
    

    File 下沉 没有 添加到 属性然而,一切似乎都很正常。

    所以我不能确切地理解为什么我们基本上需要这个 使用

    1 回复  |  直到 7 年前
        1
  •  10
  •   Kirk Larkin    7 年前

    这已包含在以下文档中: Serilog.Settings.Configuration

    (此包使用 DependencyContext 找到任何带有 Serilog Using 上面的例子是多余的。)

    Serilog.Settings.Configuration 包裹


    更多信息

    使用 以及为什么首先需要它。我希望下面的解释是有帮助的。

    考虑下面的基于代码的设置:

    Log.Logger = new LoggerConfiguration()
        .WriteTo.Console()
        .CreateLogger();
    

    在这个例子中, Console LoggerSinkConfiguration Loggersink配置 )。使用此基于代码的方法时,只有在引用的程序集中可以找到此扩展方法时,代码才会编译。

    接下来,考虑下面的方法,它使用 IConfiguration -基于策略的方法:

    Log.Logger = new LoggerConfiguration()
        .ReadFrom.Configuration(someConfiguration)
        .CreateLogger();
    
    {
        "Serilog": {
            "Using": ["Serilog.Sinks.Console"], // Redundant.
            "WriteTo": ["Console"]
        }
    }
    

    "Console" “控制台” Console() 上述扩展方法。为了做到这一点,Serilog需要首先 可拓方法 运行时 (在本例中,它们生活在 Serilog.Sinks.Console

    find public static methods that take as their first parameter a LoggerSinkConfiguration . 这个 您在问题中询问的指令是 mechanism for helping determine exactly which assemblies should be scanned

    正如文件中所述 I配置 -基于数据的方法使用 为了 automatically scan assemblies that have Serilog in their name . 因为 做 有 指令。您还可以选择 provide your own DependencyContext instance 当使用这种方法时,您可能需要明确在查找接收器时要扫描哪些程序集。