mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
fix(logging): 修复异步日志追加器中的操作取消异常处理
- 添加对 OperationCanceledException 的特殊处理,避免将其报告为后台处理错误 - 在 ReportProcessingError 方法中检查并过滤掉操作取消异常 - 添加单元测试验证当内部追加器抛出 OperationCanceledException 时不报告错误 - 创建 CancellationAppender 测试辅助类来模拟取消异常场景 - 确保取消相关的异常不会触发错误处理逻辑
This commit is contained in:
parent
49609d3821
commit
d94d8deb29
@ -1,4 +1,3 @@
|
||||
using GFramework.Core.Abstractions.Logging;
|
||||
using GFramework.Core.Logging.Appenders;
|
||||
|
||||
namespace GFramework.Core.Tests.Logging;
|
||||
@ -197,6 +196,29 @@ public class AsyncLogAppenderTests
|
||||
Assert.That(asyncAppender.Flush(), Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Append_WhenInnerAppenderThrowsOperationCanceledException_ShouldNotReportError()
|
||||
{
|
||||
var reportedExceptions = new List<Exception>();
|
||||
var innerAppender = new CancellationAppender();
|
||||
using var asyncAppender = new AsyncLogAppender(
|
||||
innerAppender,
|
||||
bufferSize: 1000,
|
||||
processingErrorHandler: reportedExceptions.Add);
|
||||
|
||||
Assert.DoesNotThrow(() =>
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
var entry = new LogEntry(DateTime.UtcNow, LogLevel.Info, "TestLogger", $"Message {i}", null, null);
|
||||
asyncAppender.Append(entry);
|
||||
}
|
||||
});
|
||||
|
||||
Assert.That(asyncAppender.Flush(), Is.True);
|
||||
Assert.That(reportedExceptions, Is.Empty);
|
||||
}
|
||||
|
||||
// 辅助测试类
|
||||
private class TestAppender : ILogAppender
|
||||
{
|
||||
@ -257,4 +279,20 @@ public class AsyncLogAppenderTests
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private class CancellationAppender : ILogAppender
|
||||
{
|
||||
public void Append(LogEntry entry)
|
||||
{
|
||||
throw new OperationCanceledException("Simulated cancellation");
|
||||
}
|
||||
|
||||
public void Flush()
|
||||
{
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,3 @@
|
||||
using System.Threading.Channels;
|
||||
using GFramework.Core.Abstractions.Logging;
|
||||
|
||||
namespace GFramework.Core.Logging.Appenders;
|
||||
@ -212,10 +211,16 @@ public sealed class AsyncLogAppender : ILogAppender
|
||||
|
||||
/// <summary>
|
||||
/// 上报后台处理异常,同时隔离观察者自身抛出的错误,避免终止处理循环。
|
||||
/// 取消相关异常表示关闭流程中的预期控制流,不应被视为后台处理失败。
|
||||
/// </summary>
|
||||
/// <param name="exception">后台处理中捕获到的异常。</param>
|
||||
private void ReportProcessingError(Exception exception)
|
||||
{
|
||||
if (exception is OperationCanceledException)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_processingErrorHandler is null)
|
||||
{
|
||||
return;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user