batchSize 在 NLog.Extensions.AzureStorage 的 NLog.config 文件中不起作用

问题描述 投票:0回答:1

我正在使用最新版本的 NLog.Extensions.AzureStorage 在文档中提到了batchSize

enter image description here

但是当我提供batchSize时,假设为1000,它采用与默认batchSize(100)相同数量的CommitedBlockCount。

我错过了什么吗?

这是我的 NLog.config 文件条目

<target
  xsi:type="AzureBlobStorage"
  name="azure"
  layout="${longdate}|${level:uppercase=true}|${machinename}|${callsite:className=true:includeSourcePath=false:methodName=false}|${callsite:className=false:includeSourcePath=false:methodName=true}|${message} ${exception:format=tostring}"
  connectionString="${gdc:item=BlobConnectionString}"
  container="azuresyncservice"
  blobName="${event-properties:environment}/Logs/Logs_${event-properties:customernumber}_${date:format=yyyy-MM-dd}.txt"
  batchSize="10000"
  queueLimit="10000" />

这是我记录行的代码

public void PrintLogs()
{
    for(int i = 0; i<= 50000; i++)
    {
        _logger?.Info("", $"print line no: {i}", null);
        Thread.Sleep(10);
    }
}

此外,如果批处理大小尚未完成并且 NLog.config 文件中的时间已过,是否有办法添加超时值以将日志推送到 azure?

azure blob nlog
1个回答
0
投票

您还必须将 TaskDelayMilliseconds 设置为一个较高的值,此库中的默认值为 200ms。我也对此感到困惑,但经过一些测试后,我发现 NLog 会在此期间之后将消息发送到 blob,而不管批量大小如何。

batchSize 在这里的作用是在实际发送消息时将消息分组为更少的提交。

如果您将batchSize = 1且TaskDelayMs = 10*1000,它仍然会每10秒发送一次消息,但它基本上仍然会一个接一个地发送消息。

© www.soinside.com 2019 - 2024. All rights reserved.