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

问题描述

我在这样的代码中有一个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项目B。我的记录器实现和Serilog软件包都在ProjectB内,这就是为什么ProjectA依赖它。我找到了this github issue,并将Serilog.Sink.Http nuget包添加到ProjectA。立即解决了问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...