Приемник Serilog RavenDb не работает в приложении asp.net 5

Я смотрю серилог и провожу несколько тестов. Пока все работает нормально, запись в консоль или файл. Однако мне не удалось заставить его работать с раковиной 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, но это тоже не сработало. Я могу хранить другие объекты в RavenDb, используя тот же DocumentStore.

Я пропустил настройку конфигурации или что-то в этом роде?


person Matthew    schedule 08.12.2015    source источник
comment
Есть ли какой-нибудь вывод на SelfLog? github.com/serilog/serilog/wiki/Debugging-and-Diagnostics   -  person Nicholas Blumhardt    schedule 09.12.2015
comment
Да, 2015-12-08T15: 50: 56 Исключение при отправке периодической партии из Serilog.Sinks.RavenDB.RavenDBSink: System.MissingMethodException: Метод не найден: 'System.Threading.Tasks.Task Raven.Client.IAsyncDocumentSession.StoreAsync (System .Объект)'. в Serilog.Sinks.RavenDB.RavenDBSink.   -  person Matthew    schedule 09.12.2015
comment
Я заметил, что RavenDBSink ссылается на старую версию RavenDB.Client (2.5.2700), поэтому я использовал эту версию, и она работает. Я пытаюсь обновить Serilog.Sinks.RavenDB, но пока безуспешно. Это выше моих возможностей.   -  person Matthew    schedule 09.12.2015


Ответы (1)


Мне удалось заставить это работать с последним клиентом RavenDb. Я создал новую (пакетную) библиотеку стилей, добавил пакет Nuget Serilog v2.0.0-beta-403, добавил пакет Nuget RavenDB.Client v3 и вставил файлы .cs из существующей библиотеки Serilog.Sinks.RavenDb. Он компилировался и работал, мне не пришлось менять код.

У меня еще не было возможности его протестировать, но, похоже, он работает нормально. Конечно, я не знаю, насколько стабильна бета-версия Serilog v2 и как долго она будет выпущена. Приятно то, что serilog v2 поддерживает .netcore. К сожалению, клиент RavenDb этого не делает, по крайней мере, пока.

person Matthew    schedule 12.12.2015