【发布时间】:2022-06-27 18:53:45
【问题描述】:
我想使用Serilog.Expressions 过滤我的日志记录以查找特定接收器。在这种情况下,如果我的自定义属性MethodName 等于“SomeOtherTask”,我只想登录到控制台接收器。 Serilog 仍在为DoSomeWork 和SomeOtherTask 记录到两个接收器。我的过滤器表达式是否有问题,或者我如何实现自定义属性 MethodName 或其他问题?
appsettings.json:
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Expressions" ],
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Console",
"Filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "MethodName = 'SomeOtherTask'"
}
}
]
},
{
"Name": "File",
"Args": {
"path": "Logs/log.txt"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "SerilogSplitLogTest"
}
}
}
程序.cs:
internal class Program
{
static void Main()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true);
var config = builder.Build();
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(config)
.CreateLogger();
new Program().Run(logger);
Console.ReadKey(true);
}
public void Run(ILogger logger)
{
DoSomeWork(logger);
SomeOtherTask(logger);
}
public void DoSomeWork(ILogger logger)
{
logger.Information("This should log to File");
}
public void SomeOtherTask(ILogger logger)
{
using (LogContext.PushProperty("MethodName", nameof(SomeOtherTask)))
{
logger.Information("This should log to Console");
}
}
}
【问题讨论】:
-
你解决过这个问题吗?我正在解决同样的问题。
-
嗨@USMC6072 不,我没有。如果您找到解决方案,请发布答案。
标签: c# serilog serilog-filter serilog-expressions