Asp.net core Serilog从上下文扩展不起作用
我有一个Asp.net core Serilog从上下文扩展不起作用,asp.net-core,logging,serilog,Asp.net Core,Logging,Serilog,我有一个ASP.netcore应用程序,我试图用一个属性丰富Serilog记录器,并通过方法调用传递它。 我使用了Serilog.Context对其进行了丰富,但毫无用处,日志中不存在该属性 节目 Log.Logger = new LoggerConfiguration().Enrich.FromLogContext() .WriteTo.File(logpath) .CreateLogger(); 控制器 public clas
ASP.netcore
应用程序,我试图用一个属性丰富Serilog
记录器,并通过方法调用传递它。
我使用了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();
}
}
p.S如果重要的话,该服务将通过依赖注入注入。您需要在中使用
属性
标记,例如
为接收器格式化输出时,例如:
.WriteTo.File(logpath, outputTemplate: mt)
(旁白:你应该是)所以为了让我在格式中放入一个
字符串这样的表单就足够了:“{Timestamp:Yy:Mm:dd HH:Mm:ss}[{Level:u3}]{corellationId}{Message}
?是的,如果你总是使用LogContext.Push(“corellationId”,value)
,那么这将显示每条消息的值({Properties}
token显示消息或消息模板中未引用的所有属性)我只想在每个请求中绑定一次属性,当我的请求进入一个ASP网络控制器时,
,然后出现在来自嵌套方法的所有日志中。您需要使用LogContext.Push来实现这一点-这可以在中间件中完成,或者通过使用(LogContext.Push(“req”,id))执行
在控制器中等。最好找到一个关于Serilog LogContext的好教程
"[id] [value]"+ "[SomeService log]"
let mt = "{LogLevel:u1}|{SourceContext}|{Message:l}|{Properties}{NewLine}{Exception}"
.WriteTo.File(logpath, outputTemplate: mt)