【问题标题】:Serilog RavenDb sink not working in an asp.net 5 appSerilog RavenDb 接收器在 asp.net 5 应用程序中不起作用
【发布时间】:2015-12-12 11:33:15
【问题描述】:

我正在查看 serilog 并运行一些测试。到目前为止,它可以正常写入控制台或文件。但是,我没有任何运气让它与 RavenDb 接收器一起工作。我试图让它在 asp.net 5 应用程序中工作。 我查看了以下文章:

http://nblumhardt.com/2015/05/diagnostic-logging-in-dnx-asp-net-5/ http://nblumhardt.com/2013/06/serilog-and-ravendb/

我从一个空应用开始,并在 project.json 中添加了以下依赖项。

"Serilog.Framework.Logging": "1.0.0-rc1-final-10071",
"Serilog.Sinks.RavenDB": "1.5.4",
"RavenDB.Client": "3.0.30000"

我还删除了 dnxcore。

然后我在startup.cs中添加了如下代码:

public Startup()
{
    var documentStore = new DocumentStore()
    {
        Url = "http://localhost:8080",
        DefaultDatabase = "Logs"
    }.Initialize();

    Log.Logger = new LoggerConfiguration()
       .WriteTo.File(@"c:\temp\log.txt")
       .WriteTo.Console()
       .WriteTo.RavenDB(documentStore)
       .CreateLogger();
}

public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddSerilog();
    app.UseIISPlatformHandler();

    app.Run(async (context) =>
    {
        Log.Information("Hello World");
        await context.Response.WriteAsync("Hello World!");
    });
}

一切都很好地记录到文件和控制台,并且创建了日志数据库,但没有日志条目存储在 RavenDb 中。

我尝试了各种日志级别。我尝试减少批量大小。我怀疑这与文档存储的生命周期有关,所以我在ConfigureServices 方法中添加了以下内容。

services.AddSingleton(x =>
{
   return new DocumentStore()
   {
       Url = "http://localhost:8080/",
       DefaultDatabase = "Test",
   }.Initialize();
}

然后我将记录器配置代码移动到Configure 方法中并使用了DI 实例,但这也不起作用。我可以使用相同的DocumentStore 将其他对象存储在 RavenDb 中。

我错过了配置设置吗?

【问题讨论】:

  • 是,2015-12-08T15:50:56 从 Serilog.Sinks.RavenDB.RavenDBSink 发出定期批处理时出现异常:System.MissingMethodException:找不到方法:'System.Threading.Tasks.Task Raven .Client.IAsyncDocumentSession.StoreAsync(System.Object)'。在 Serilog.Sinks.RavenDB.RavenDBSink。
  • 我注意到 RavenDBSink 引用了旧版本的 RavenDB.Client (2.5.2700),所以我改用了那个版本,它可以工作。我正在尝试更新 Serilog.Sinks.RavenDB 但到目前为止还没有运气。这超出了我的能力范围。

标签: c# ravendb asp.net-core serilog


【解决方案1】:

我能够使用最新的 RavenDb 客户端进行此操作。我创建了一个新的(包)样式库,添加了 Serilog nuget 包 v2.0.0-beta-403,添加了 RavenDB.Client v3 nuget 包,并从现有的 Serilog.Sinks.RavenDb 库中放入了 .cs 文件。它编译并工作,我不必更改任何代码。

我还没有机会对其进行太多测试,但它似乎运行良好。当然我不知道 Serilog v2 beta 有多稳定,也不知道要等多久才能发布。好消息是 serilog v2 支持 .netcore。不幸的是,RavenDb 客户端没有,至少现在还没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2018-10-26
    • 2019-12-31
    • 2015-02-25
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多