我正在使用最新版本的 NLog.Extensions.AzureStorage 在文档中提到了batchSize
但是当我提供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?
您还必须将 TaskDelayMilliseconds 设置为一个较高的值,此库中的默认值为 200ms。我也对此感到困惑,但经过一些测试后,我发现 NLog 会在此期间之后将消息发送到 blob,而不管批量大小如何。
batchSize 在这里的作用是在实际发送消息时将消息分组为更少的提交。
如果您将batchSize = 1且TaskDelayMs = 10*1000,它仍然会每10秒发送一次消息,但它基本上仍然会一个接一个地发送消息。