I am trying to go away from statically linking my code to specific serilog sinks and use xml-configuration in appsettings instead.
I used to have code like this:
serilogConfig = serilogConfig.WriteTo.AzureDocumentDB(
new Uri(logConfig.AzureDocumentDBConfig.Endpoint),
logConfig.AzureDocumentDBConfig.AuthKey,
logConfig.AzureDocumentDBConfig.Database,
logConfig.AzureDocumentDBConfig.Collection);
The C#-code to load from appsettings is this:
var log = new LoggerConfiguration()
.ReadFrom.AppSettings()
.CreateLogger();
I am trying to change this to e.g. this configuration data
<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" />
My problem: nothing is written to Cosmos.
Am I missing something obvious here? I have checked the config values a million times - and they are correct. I have also tried to use non-existing values for "databaseName" and "collectionName", and serilog creates these artifacts just fine in DocumentDB - to it is able to connect to Cosmos.
And finally - this is the entire code in my test console app:
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...");
Logging level in app config is this:
<add key="serilog:minimum-level" value="Verbose" />
Thanks :-)
UPDATE:
I have created a completely new Visual Studio project where I am using the fluent configuration API. My code is this:
var logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.AzureDocumentDB("https://myendpoint.documents.azure.com:443/", "mykey")
.CreateLogger();
The behavior is exactly the same. Nothing is written to Cosmos. If I do not specify collection name and database name, a "Logs" collection and a "Diagnostics" database is created in Cosmos - but nothing is written.
I am beginning to question life itself and the meaning with it ... what am I missing here?
For testing purposes I have created a new Cosmos instance and downloaded the "ToDo"-app that writes to the database. This one works, and if I change the pointers to my original Cosmos DB, it can write to this as well. My own code cannot write to the new DB created for test.