如何在使用Polly V8 ResiliencePipelineBuilder时屏蔽Execution Attempt日志?
屏蔽Polly V8重试策略的"Execution attempt"冗余日志
可以屏蔽这条冗余日志,以下是两种实用方案:
方案一:通过Serilog过滤规则屏蔽
直接在Serilog配置中添加过滤规则,匹配目标日志的特征(消息内容、来源标识),将其排除:
代码方式配置Serilog过滤
Log.Logger = new LoggerConfiguration() .Filter.ByExcluding(evt => evt.MessageTemplate.Text.Contains("Execution attempt") && evt.Properties.TryGetValue("Source", out var source) && source.ToString().Contains("screenshot-stream-with-retries")) // 保留你的其他Serilog配置(如WriteTo、Enrich等) .CreateLogger();
配置文件方式(appsettings.json)
"Serilog": { "Filter": [ { "Name": "ByExcluding", "Args": { "expression": "MessageTemplate like '%Execution attempt%' and Source like '%screenshot-stream-with-retries%'" } } ], // 其他Serilog配置项 }
方案二:修改Polly重试策略的遥测配置
这条日志来自Polly V8重试策略的遥测模块,你可以直接在重试策略选项中禁用该事件的日志输出:
public ResiliencePipelineBuilder<Stream> Configure(ResiliencePipelineBuilder<Stream> pipelineBuilder) { return pipelineBuilder.AddRetry(new RetryStrategyOptions<Stream> { MaxRetryAttempts = 3, Delay = TimeSpan.FromSeconds(2), BackoffType = DelayBackoffType.Exponential, ShouldHandle = new PredicateBuilder<Stream>().Handle<Exception>(), OnRetry = retryArguments => { _logger.LogWarning($"Screenshot failed with exception {retryArguments.Outcome.Exception.Message}. " + $"Waiting {retryArguments.Duration} before next retry. Retry attempt {retryArguments.AttemptNumber}"); return ValueTask.CompletedTask; }, // 配置遥测,将重试Attempt事件的日志级别设为None Telemetry = new RetryStrategyTelemetryOptions { LogLevel = new Dictionary<RetryEvent, LogLevel> { { RetryEvent.Attempt, LogLevel.None } } } }); }
如果需要全局禁用所有重试策略的Attempt日志,也可以在管道构建时配置全局遥测:
pipelineBuilder.ConfigureTelemetry(options => { options.Logging.LogLevelMap.TryAdd("Retry.Attempt", LogLevel.None); });
内容的提问来源于stack exchange,提问作者Raúl Portela
相关产品推荐
相关产品推荐

