如何解决.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
属性动态确定表名。由于您的事件日志记录机制需要考虑不存在的表(如上所述),因此,真正的名称更改时并不需要显式创建新表。当您尝试编写日志事件时,这应该会自动发生。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。