使用 Serilog Static Logger 将日志输出到 Xunit

Output logs to Xunit using Serilog Static Logger

我在我的项目中使用静态记录器方法使用 serilog - 能够在我的 class 库上调用 Log.X 而不是在任何地方注入记录器 class 很好也很容易.

然而,当涉及到 unit/integration 测试时,如果测试失败,那么从 class 库中查看错误日志将非常 有益(更多用于集成测试)。

因为我没有将 ILogger 注入我的 classes(由于使用了静态记录器),所以我无法创建将输出写入测试日志的模拟测试记录器。

有没有人设法使用 Serilog 全局(静态)记录器将消息输出到 XUnit?

Serilog.Sinks.XUnit nuget 包可以轻松实现这一点。在您的项目中引用 nuget。然后就可以在测试中使用static logger了:

using Serilog;
using Xunit;
using Xunit.Abstractions;

namespace XunitToSerilog
{
    public class SampleTest
    {
        public SampleTest(ITestOutputHelper output)
        {
            Log.Logger = new LoggerConfiguration()
            // add the xunit test output sink to the serilog logger
            // https://github.com/trbenning/serilog-sinks-xunit#serilog-sinks-xunit
            .WriteTo.TestOutput(output)
            .CreateLogger();
        }

        [Fact]
        public void Test1()
        {
            Log.Information("goes to test output");
        }
    }
}