Я пытаюсь уйти от статической привязки своего кода к определенным приемникам 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, она также может написать об этом.Мой собственный код не может записать в новую БД, созданную для теста.