Использование Xml-конфигурации для входа в базу данных Cosmos с помощью serilog - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь уйти от статической привязки своего кода к определенным приемникам serilog и использовать вместо этого xml-конфигурацию в настройках приложения.

Раньше у меня был такой код:

serilogConfig = serilogConfig.WriteTo.AzureDocumentDB(
                    new Uri(logConfig.AzureDocumentDBConfig.Endpoint),
                    logConfig.AzureDocumentDBConfig.AuthKey,
                    logConfig.AzureDocumentDBConfig.Database,
                    logConfig.AzureDocumentDBConfig.Collection);

C # -код для загрузки из appsettings выглядит так:

var log = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();

Я пытаюсь изменить это, например, на эти данные конфигурации

<add key="serilog:using:AzureDocumentDB" value="Serilog.Sinks.AzureDocumentDB" />
<add key="serilog:write-to:AzureDocumentDB.endpointUrl" value="https://my_prefix.documents.azure.com:443/" />
<add key="serilog:write-to:AzureDocumentDB.authorizationKey" value="mykey" />
<add key="serilog:write-to:AzureDocumentDB.databaseName" value="mydatabasename" />
<add key="serilog:write-to:AzureDocumentDB.collectionName" value="mycollectionname" />
<add key="serilog:write-to:AzureDocumentDB.timeToLive" value="3600" />

Моя проблема: ничего не записано в Космос.

Я что-то упускаю здесь очевидное?Я проверил значения конфигурации миллион раз - и они верны.Я также пытался использовать несуществующие значения для «databaseName» и «collectionName», и serilog прекрасно создает эти артефакты в DocumentDB - чтобы он мог подключиться к Cosmos.

И, наконец, этоВесь код в моем тестовом консольном приложении:

var log = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();

log.Information("Test");
log.Error(new ApplicationException("some error"), "stuff failed");
log.Warning("Test2");

Console.WriteLine("Press Enter to exit...");

Уровень ведения журнала в конфигурации приложения таков:

<add key="serilog:minimum-level" value="Verbose" />

Спасибо: -)

ОБНОВЛЕНИЕ:

Я создал совершенно новый проект Visual Studio, в котором я использую API быстрой конфигурации.Мой код такой:

var logger = new LoggerConfiguration()
    .WriteTo.ColoredConsole()
    .WriteTo.AzureDocumentDB("https://myendpoint.documents.azure.com:443/", "mykey")
    .CreateLogger();

Поведение точно такое же.Ничто не написано в Космос.Если я не укажу имя коллекции и имя базы данных, в Cosmos создается коллекция «Журналы» и база данных «Диагностика», но ничего не пишется.

Я начинаю подвергать сомнению саму жизнь и ее значение... что мне здесь не хватает?

В целях тестирования я создал новый экземпляр Cosmos и загрузил приложение ToDo, которое записывает в базу данных.Это работает, и если я поменяю указатели на мою исходную базу данных Cosmos DB, она также может написать об этом.Мой собственный код не может записать в новую БД, созданную для теста.

1 Ответ

0 голосов
/ 28 марта 2019

Ну, получается, что мне действительно не хватало чего-то очевидного. Поток приложения завершился до того, как данные могли быть отправлены / сброшены в Cosmos.

https://github.com/serilog/serilog-sinks-azuredocumentdb/issues/82

...