C# 按方法名称排序的Serilog筛选器

C# 按方法名称排序的Serilog筛选器,c#,serilog,C#,Serilog,我想知道是否有可能实现一种过滤,我们改进serilog的过滤,使之更具体地针对sublogger。目前我可以过滤名称空间,但是我只想访问特定名称空间中要记录到电子邮件的一个方法,该名称空间的其余方法应保留默认记录 .Filter.ByIncludingOnly(Matching.FromSource("SomeNamespace")) 但是,我只希望访问SomeNamespace中的method1,而不希望访问同样位于同一命名空间中的method2。有什么想法吗 我不能使用

我想知道是否有可能实现一种过滤,我们改进serilog的过滤,使之更具体地针对sublogger。目前我可以过滤名称空间,但是我只想访问特定名称空间中要记录到电子邮件的一个方法,该名称空间的其余方法应保留默认记录

.Filter.ByIncludingOnly(Matching.FromSource("SomeNamespace"))
但是,我只希望访问SomeNamespace中的method1,而不希望访问同样位于同一命名空间中的method2。有什么想法吗


我不能使用serilog级别来实现这一点。最需要的是过滤器的使用。

为了按照您所描述的方式应用过滤器,您必须将方法名称作为一个可用的名称,以便进行过滤。Serilog中没有捕获方法名称的内置内容,因此您必须确保在写入日志时创建此属性

使用
LogContext
可以添加您知道的属性,该属性将标记特定筛选器要包含(或排除)的日志消息

e、 g

然后在日志管道中,根据要查找的属性对子记录器应用过滤器。例如

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Logger(wt => wt
        .Enrich.FromLogContext()
        .Filter.ByIncludingOnly(Matching.WithProperty("ThisIsSuperCritical"))
        .WriteTo.SomeSink())
    .CreateLogger();
注意:不要忘记添加
丰富.FromLogContext()
,否则属性将不会添加到日志上下文中


对于少数方法,上述方法是可行的。如果您有许多方法,并且需要动态获取方法的名称,那么您必须使用(这可能会影响性能,因为这是一个昂贵的操作)

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Logger(wt => wt
        .Enrich.FromLogContext()
        .Filter.ByIncludingOnly(Matching.WithProperty("ThisIsSuperCritical"))
        .WriteTo.SomeSink())
    .CreateLogger();