C# 带Autofac的Serilog

C# 带Autofac的Serilog,c#,autofac,serilog,C#,Autofac,Serilog,我有一个记录器包装器,我想通过以下配置将serilog注入其中: var logger = new LoggerConfiguration() .WriteTo.RollingFile( AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "/Log-{Date}.txt") .CreateLogger(); 我似乎找不到正确的注册方法。我希望它成为单身汉。以上就是一个例子 我尝试注册上面的实例。没

我有一个记录器包装器,我想通过以下配置将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();
builder.Register((c,p)=>
{
返回新的LoggerConfiguration()
.WriteTo.RollingFile(
AppDomain.CurrentDomain.GetData(“DataDirectory”).ToString()+“/Log-{Date}.txt”)
.CreateLogger();
}).SingleInstance();
我为AutoFac的
ContainerBuilder创建了一个扩展方法

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

var builder=newcontainerbuilder();
builder.RegisterSerilog(“我的日志路径”);//或者是一个伐木工人
var container=builder.Build();
var logger=container.Resolve();
logger.LogInformation(“Hello World”);

这也适用于ASP.NET-Core。您可以在上找到示例和源代码。

这里有另一个用于Autofac和Serilog集成的Nuget软件包:

它与ASP.NET Core 3.1配合良好。 步骤:

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

  • 我没有太多时间,但我可以向您发送链接:
    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");