来自上下文的Serilog扩充无法正常工作

时间:2019-11-27 09:19:43

标签: asp.net-core logging serilog

我有一个ASP .NET Core应用程序,我正在尝试为Serilog记录器添加一个属性,并通过throghout方法调用将其传递给它。 我曾经用Serilog.Context来充实它,但是没有在日志中显示该属性。

程序

Log.Logger = new LoggerConfiguration().Enrich.FromLogContext()
                .WriteTo.File(logpath)
                .CreateLogger();

控制器

public class SomeController{

   public ILogger logger=Log.ForContext<SomeController>();
   private SomeService Service;

   public SomeController(SomeService serv)
   {
      this.service=serv;
   }

   [HttpGet]
   public async Task DoSomething()
   {
          string corellationId=Guid.NewGuid().ToString();
          LogContext.PushProperty("id",corellationId);
          service.Run();
    }
}

服务

class SomeService
{
   private ILogger logger=Log.ForContext<SomeService>();
   public void Run()
   {
       logger.Information("I AM NOT SEEING the ID from upstream !");
   }
}

基本上,我希望SomeService的日志具有在上游提供的ID(控制器操作)。 我想要什么:

"[id] [value]"+ "[SomeService log]" 

P.S 如果需要的话,通过依赖项注入来注入服务。

1 个答案:

答案 0 :(得分:2)

您需要在your outputTemplate中使用Properties令牌,例如

let mt = "{LogLevel:u1}|{SourceContext}|{Message:l}|{Properties}{NewLine}{Exception}"

格式化接收器的输出时,例如:

 .WriteTo.File(logpath, outputTemplate: mt)

(旁边:您应该是using the LogContext.Push return value