我试图摆脱将代码静态链接到特定的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" />
我的问题:没有任何内容写入Cosmos。
我在这里缺少明显的东西吗?我已经检查了配置值一百万次-并且它们是正确的。我还尝试过使用“ 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,它也可以写入。我自己的代码无法写入为测试创建的新数据库。
答案 0 :(得分:0)
好吧,事实证明我确实缺少明显的东西。在将数据推入/丢弃到Cosmos之前,应用程序线程结束。
https://github.com/serilog/serilog-sinks-azuredocumentdb/issues/82