使用Xml配置通过serilog登录到Cosmos DB

时间:2019-03-27 12:31:20

标签: azure-cosmosdb serilog azure-cosmosdb-sqlapi

我试图摆脱将代码静态链接到特定的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,它也可以写入。我自己的代码无法写入为测试创建的新数据库。

1 个答案:

答案 0 :(得分:0)

好吧,事实证明我确实缺少明显的东西。在将数据推入/丢弃到Cosmos之前,应用程序线程结束。

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