带有 Autofac 的 Serilog

Serilog with Autofac

我有一个记录器包装器,我想使用以下配置向其注入 serilog:

var logger = new LoggerConfiguration()
   .WriteTo.RollingFile(
      AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "/Log-{Date}.txt")
   .CreateLogger();

我似乎找不到正确的注册方法。我想要它作为单身人士。以上是实例。

我尝试注册上面的实例。没有工作。我试过 lambda,没用。

什么有效?有人吗?

也许这有帮助:

builder.Register<ILogger>((c, p) =>
{
    return new LoggerConfiguration()
      .WriteTo.RollingFile(
        AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "/Log-{Date}.txt")
      .CreateLogger();
}).SingleInstance();

我为 AutoFac 的 ContainerBuilder 创建了一个带有扩展方法的 nuget-package

您需要做的就是安装它并使用记录器配置或日志路径(以及可选的模板,您将获得默认值)调用扩展。

var builder = new ContainerBuilder();
builder.RegisterSerilog("my-log-path"); // or a loggerconfiguration
var container = builder.Build();
var logger = container.Resolve<ILogger<MyClass>>();
logger.LogInformation("Hello World");

这也适用于 ASP.NET-Core。您可以在 github-repository.

上找到示例和源代码

这里还有另一个用于 Autofac 和 Serilog 集成的 Nuget 包: Autofac-Serilog integration

它适用于 ASP.NET Core 3.1。 步骤:

  1. 安装包
  2. 正常创建记录器
  3. 在模块之一或 Startup.cs 文件的 ConfigureContainer() 方法中调用 builder.RegisterLogger()