.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。当您尝试写入日志事件时,这应该会自动发生。
我的应用程序是 .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。当您尝试写入日志事件时,这应该会自动发生。