Я использую SeriLog, и с помощью обогащения можно достичь того, чего я хотел.При настройке Serilog вам необходимо убедиться, что вы настроили обогащение для LogContext:
return webHost
.UseStartup<Startup>()
.UseSerilog((context, config) =>
{
config
.ReadFrom.Configuration(context.Configuration)
.Enrich.FromLogContext();
});
, а затем добавили необходимую информацию об области непосредственно перед или после создания своей области DI:
var task = Task.Run(() =>
{
using (Serilog.Context.LogContext.PushProperty("ExecutionScope", "MyMultithreadedScope "))
using (var scope = app.ApplicationServices.CreateScope())
{
Logger.LogDebug("test");
//....
}
});
Вы также должны указать свою собственность в Serilog outputTemplate.Пример: "{Timestamp:HH:mm:ss.fff} {ExecutionScope}{Message}"
LogContext использует AsyncLocal для хранения информации в контексте и поддерживает изменения потока управления, такие как асинхронность и многопоточность.