.NET Core 3.1:Serilog-WriteTo AzureTable存储-如果不存在则创建表

问题描述

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

提前谢谢!

解决方法

听起来,您实际上是在{roll}版本的Serilog.Sinks.AzureTableStorage接收器之后,每天创建一个新表,并且还可以抵抗该表在应用程序运行时突然消失的情况。这些接收器当前均不支持其当前形式的任何东西,因此您必须创建自己的ILogEventSink才能实现所追求的目标。要考虑的一些事情:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...