using Microsoft.Extensions.Logging; using Xunit.Abstractions; namespace TestProject1.XUnit.Logging; /// /// 适用于Xunit的日志记录器,使用ITestOutputHelper输出 /// public class XunitLogger : ILogger { private readonly ITestOutputHelper _testOutputHelper; private readonly string _categoryName; public XunitLogger(ITestOutputHelper testOutputHelper, string categoryName) { _testOutputHelper = testOutputHelper; _categoryName = categoryName; } public IDisposable? BeginScope(TState state) where TState : notnull => NoopDisposable.Instance; public bool IsEnabled(LogLevel logLevel) => true; public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { _testOutputHelper.WriteLine($"{_categoryName} [{eventId}] {formatter(state, exception)}"); if (exception != null) _testOutputHelper.WriteLine(exception.ToString()); } private class NoopDisposable : IDisposable { public static readonly NoopDisposable Instance = new(); public void Dispose() { } } }