Фильтровать журналы Serilog на разные приемники в зависимости от источника контекста?C#

Место общения программистов C#
Anonymous
Фильтровать журналы Serilog на разные приемники в зависимости от источника контекста?

Сообщение Anonymous »

У меня есть приложение .NET Core 2.0, в котором я успешно использую Serilog для ведения журналов. Теперь я хотел бы записать некоторую статистику производительности базы данных в отдельный приемник (они не предназначены для отладки, что, по сути, является целью всех остальных журналов в приложении, поэтому я хотел бы хранить их отдельно) и решил, что это можно сделать. создав регистратор статистики БД с помощью Log.ForContext().

Я не знаю, как мне настроить Serilog с помощью мой appsettings.json для записи моих «журналов отладки» в один приемник, а журнала статистики БД в другой? Я надеюсь, что можно сделать что-то вроде:

"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"pathFormat": "logs/Log-{Date}.log",
"Filter": {
"ByExcluding": "FromSource(MyClass)"
}
},
{
"Name": "RollingFile",
"pathFormat": "logs/DBStat-{Date}.log",
"Filter": {
"ByIncludingOnly": "FromSource(MyClass)"
}
}
]
}


Части конфигурации «Фильтр» — это чистая догадка с моей стороны. Возможно ли это с помощью моего файла конфигурации или мне нужно сделать это в коде моего файла Startup.cs?

EDIT: у меня это работает, используя API C#, но все же хотелось бы разобраться в этом с помощью конфигурации JSON:

Log.Logger = new LoggerConfiguration()
.WriteTo.Logger(lc => lc
.Filter.ByExcluding(Matching.FromSource())
.WriteTo.LiterateConsole())
.WriteTo.Logger(lc => lc
.Filter.ByExcluding(Matching.FromSource())
.WriteTo.RollingFile("logs/DebugLog-{Date}.log"))
.WriteTo.Logger(lc => lc
.Filter.ByIncludingOnly(Matching.FromSource())
.WriteTo.RollingFile("logs/DBStats-{Date}.log", outputTemplate: "{Message}{NewLine}"))
.CreateLogger();


Подробнее здесь: https://stackoverflow.com/questions/465 ... ext-source

Вернуться в «C#»