我有一个 .NET 6 应用程序,它使用 v3 Cosmos SDK 将数据写入容器。
当我将应用程序范围的默认日志记录级别设置为信息
时,我看到来自 Comsos SDK 的 GET 请求,如下所示:
[09:41:17 INF] Start processing HTTP request GET https://127.0.0.1:8081/dbs/requeststore/colls/orchestrationrequest
[09:41:17 INF] Sending HTTP request GET https://127.0.0.1:8081/dbs/requeststore/colls/orchestrationrequest
[09:41:17 INF] Received HTTP response headers after 33.8561ms - 200
[09:41:17 INF] End processing HTTP request after 44.5824ms - 200
尽管我可以看到我的数据已成功保留,但我没有看到任何有关文档创建的日志记录。
编辑:这可能与 Cosmos 使用的 RNTBD 协议(protocol)有关吗?那么 GET 请求获取将数据发送到容器所需的信息,然后建立 RTNBD 连接吗?如果能够进行一些日志记录就好了。
编辑2:我能够使用以下代码让跟踪监听器将数据写入控制台:
Type defaultTrace = Type.GetType("Microsoft.Azure.Cosmos.Core.Trace.DefaultTrace,Microsoft.Azure.Cosmos.Direct");
TraceSource traceSource = (TraceSource)defaultTrace.GetProperty("TraceSource").GetValue(null);
var consoleTrance = new ConsoleTraceListener();
traceSource.Listeners.Add(consoleTrance);
最佳答案
如果您用来记录的内容自动检测并记录 HTTP 请求(例如 Application Insights),那么是的,不记录数据平面操作(例如创建项目)是有意义的。
有2种连接方式,V3 SDK默认为Direct:https://docs.microsoft.com/azure/cosmos-db/sql-sdk-connection-modes
在直接模式下,预计会看到一些 HTTP 交互(用于路由 https://learn.microsoft.com/azure/cosmos-db/nosql/sdk-connection-modes#routing )。
SDK 公开了每个操作的诊断信息,其中包括完整延迟/时间等信息,对于故障排除非常有用:https://learn.microsoft.com/azure/cosmos-db/nosql/troubleshoot-dotnet-sdk#capture-diagnostics
SDK还公开了Trace,因此您可以定义Trace Listener,但这将包含大量事件信息(不仅仅是建立连接和发送请求)。
关于.net - Cosmos SDK v3 不记录文档创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74136908/