.NET Core 3.1:Serilog - 写入 AzureTable 存储 - 如果不存在则创建 table

.NET Core 3.1: Serilog - WriteTo AzureTable Storage - Create table if not exists

我的应用程序是 .NET Core 3.1。基于,我正在使用 Serilog 进行日志记录。我用来存储日志的接收器是 AzureTableStorage。 在将日志写入 Azure Table 存储时,如果不存在,是否可以设置一个选项来创建 table? Table 是在应用程序启动后创建的,但是如果我想动态创建 table 怎么办,例如,按天?

提前致谢!

听起来您基本上是在使用 Serilog.Sinks.AzureTableStorage 接收器的 'rolling' 版本,它每天创建一个新的 table,并且对 [=26] 也有弹性=] 在应用 运行 时突然消失。当前形式的接收器目前不支持这些内容,因此您必须创建自己的 ILogEventSink 才能实现您的目标。需要考虑的一些事项:

  • 一个好的起点可能是查看现有的 AzureBatchingTableStorageSink
  • 要处理 table 在应用程序处于 运行 时被删除的情况,请注意 CreateIfNotExists() 方法每次都向 blob 服务发出 HTTP 请求调用,因此对每个日志事件(或批处理)执行此操作将有效地使接收器发出的 HTTP 请求数量翻倍。相反,您可以乐观地将事件写入 table,并且仅在收到指示 table 不存在的错误代码时才创建 table。
  • table 名称必须根据 LogEvent.Timestamp 属性 动态确定。由于您的事件记录机制需要考虑 table 不存在(如上所述),因此当名称更改时没有必要显式创建新的 table。当您尝试写入日志事件时,这应该会自动发生。