我试图摆脱静态地将我的代码链接到特定的serilog接收器,并在appsettings中使用xml-configuration。
我以前有这样的代码:
serilogConfig = serilogConfig.WriteTo.AzureDocumentDB(
new Uri(logConfig.AzureDocumentDBConfig.Endpoint),
logConfig.AzureDocumentDBConfig.AuthKey,
logConfig.AzureDocumentDBConfig.Database,
logConfig.AzureDocumentDBConfig.Collection);
从appsettings加载的C#代码是这样的:
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...");
app config中的日志级别为:
<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”-app。这个工作,如果我更改指向我原来的Cosmos DB的指针,它也可以写入此。我自己的代码无法写入为测试创建的新数据库。
好吧,事实证明我确实错过了一些明显的东西。在将数据推送/刷新到Cosmos之前,应用程序线程已结束。
https://github.com/serilog/serilog-sinks-azuredocumentdb/issues/82