【问题标题】:Cannot specify Http sink for serilog in appsettings with Serilog.Sinks.Http nuget package无法使用 Serilog.Sinks.Http nuget 包在 appsettings 中为 serilog 指定 Http 接收器
【发布时间】:2020-09-14 21:46:57
【问题描述】:

我在这样的代码中有一个 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”。请参阅下面的解决方案。

【问题讨论】:

  • 您是否尝试过设置并查看SelfLog
  • 不,我没有。我现在才这样做,但它没有发出任何消息。
  • 只是为了确认您已将 .ReadFrom.AppSettings() 添加到您的记录器配置中?
  • 是的,我做到了。最低级别设置工作正常,并且我的 ELK Stack 日志服务器上的日志级别正在更改。就在我在 app.config 中添加写入设置时,它会在启动时冻结。
  • 请记住,appsettings 方法不会调用您的第一个方法,它会调用 .WriteTo.Http([URL]) 那么您测试了吗?

标签: c# app-config serilog


【解决方案1】:

我认为您忘记将&lt;add key="serilog:write-to:DurableHttpUsingTimeRolledBuffers" /&gt; 添加到您的配置中。我的配置看起来像这样,并且似乎按预期工作。

<?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>

【讨论】:

  • 感谢您的回答。这对我来说仍然很冷。这是我的 nuget 包版本:Serilog 2.10.0-dev-01191、Serilog.Settings.AppSettings 2.2.2、Serilog.Sinks.Http 7.0.1。那是你正在使用的吗?我想不出还有什么可以与您和我的不同。
  • 您可以在 github.com/FantasticFiasco/… 上找到我的示例应用程序,在名为 feat/serilog-settings-appsettings 的分支中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2020-11-23
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多