无法使用 Serilog.Sinks.Http nuget 包在 appsettings 中为 serilog 指定 Http sink

Cannot specify Http sink for serilog in appsettings with Serilog.Sinks.Http nuget package

我在这样的代码中有一个 serilog 配置:

            _seriLog = new LoggerConfiguration()
                .WriteTo.DurableHttpUsingTimeRolledBuffers("http://192.168.100.178:8080")
                .CreateLogger();

并想将其更改为配置文件。我添加了 Seriolog.Settings.AppSettings nuget 包,并尝试按照 github.

上的说明进行操作
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="serilog:minimum-level"  value="Verbose"/>
        <add key="serilog:using:Http" value="Serilog.Sinks.Http" />
        <add key="serilog:write-to:Http.requestUri" value="http://192.168.100.178:8080" />
    </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
</configuration>

当我启动应用程序时,它挂起。没有抛出异常,堆栈跟踪对我来说没有意义。这是 LogManager 线程的堆栈跟踪: stack trace

更新:启动项目实际上抛出了异常:无法加载文件或程序集'Serilog.Sinks.Http'。请参阅下面的解决方案。

我想您忘记了将 <add key="serilog:write-to:DurableHttpUsingTimeRolledBuffers" /> 添加到您的配置中。我的配置看起来像这样并且似乎按预期工作。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="serilog:using:Http" value="Serilog.Sinks.Http" />
    <add key="serilog:write-to:DurableHttpUsingTimeRolledBuffers" />
    <add key="serilog:write-to:DurableHttpUsingTimeRolledBuffers.requestUri" value="http://localhost:8080/log-events" />
  </appSettings>
</configuration>

实际上抛出了一个异常。我没有看到这个,因为我的异常设置被意外更改了。 ProjectA 抱怨找不到 Serilog.Sinks.Http。 ProjectA 是一个 .net Framework 项目,它引用了 .net Standard 的 ProjectB。我的记录器实现和 Serilog 包都在 ProjectB 中,这就是 ProjectA 依赖它的原因。我找到 this github issue,并将 Serilog.Sink.Http nuget 包添加到 ProjectA。立即解决问题。