我有一个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 如果需要的话,通过依赖项注入来注入服务。
答案 0 :(得分:2)
您需要在your outputTemplate
中使用Properties
令牌,例如
let mt = "{LogLevel:u1}|{SourceContext}|{Message:l}|{Properties}{NewLine}{Exception}"
格式化接收器的输出时,例如:
.WriteTo.File(logpath, outputTemplate: mt)