1

我正在使用在环境变量中覆盖的 JSON 配置文件。该文件包括 Serilog 配置,我希望能够禁用特定接收器,除非在特定条件下使用环境变量覆盖。

我发现像在这个Stack Overflow 答案中设置环境变量以用字符串覆盖数组元素WriteTo将有效地禁用该接收器。例如,我可以将环境变量设置Serilog:WriteTo:1为字符串disable(或任何其他字符串)。但是,使用命名属性会更有意义,例如Serilog:WriteTo:SpecialCaseSink.

查看ConfigurationReader(下面)的源代码,看起来这会起作用,因为它只依赖于对部分GetChildren进行迭代的调用WriteTo,这就是ConfigurationLoggerConfigurationExtensions.

除了 Serilog 更改其内部实现的风险之外,这种命名方法是否有任何缺点?是否有其他方法可以选择性地启用或禁用仅使用配置不使用索引的 Serilog 接收器?

谢谢!

void ApplySinks(LoggerConfiguration loggerConfiguration)
{
    var writeToDirective = _section.GetSection("WriteTo");
    if (writeToDirective.GetChildren().Any())
    {
        var methodCalls = GetMethodCalls(writeToDirective);
        CallConfigurationMethods(methodCalls, FindSinkConfigurationMethods(_configurationAssemblies), loggerConfiguration.WriteTo);
    }
}

然后

internal ILookup<string, Dictionary<string, IConfigurationArgumentValue>> GetMethodCalls(IConfigurationSection directive)
{
    var children = directive.GetChildren().ToList();

    var result =
        (from child in children
            // big query
        );

    return result;
}
4

0 回答 0