gpt4 book ai didi

logging - 当源上下文不是特定值时,最好的丰富方式

转载 作者:行者123 更新时间:2023-12-03 08:46:01 26 4
gpt4 key购买 nike

以编程方式构建 LoggerConfiguration 时为了稍后使用,我想要并成功地限制对除一个(来自旧 Webforms 网站的 Global.asax)之外的所有源上下文值使用丰富器。

但在我看来,这似乎与我认为 Serilog 库通过其相当漂亮和优雅的流畅 API 作为实践的目的相距甚远(我不喜欢那个 Invoke 调用):

private static LoggerConfiguration GetBasicLoggerConfig()
{
return new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.When(
logEvent => !Matching.FromSource("ASP.global_asax").Invoke(logEvent),
enrichmentConfig => enrichmentConfig.WithAnyKindOfEnricher());
}

我使用此逻辑来排除丰富器列表在脱离上下文时运行,并且只希望它们在页面生命周期内执行。但无论这种情况如何,由于我将在其他地方应用这种方法,我希望保持它的简洁和简短,我最感兴趣的是这个概念本身 - “通过排除特定上下文来丰富”。>

我寻找过类似 WhenNot 的方法或NotMatching来表达“否定”/“排除”,但没能在图书馆找到它们。尝试使用静态类提供的其他方法 Matching但无济于事。该项目很大,我想根据不同的上下文个性化整个日志记录(因此最终使用一系列 Enrich.When() s - 并使用大量丰富器,获取完整的配置树,其中包含几个“仅排除一个”上下文”部分看起来丑陋/困惑)。

当然,像下面的例子那样集中声明上下文的默认值并不能解决问题,因为会通过 .ForContext<T>() 声明不同的上下文。除了其中一个之外,所有这些人都必须“捕获”致富的条件。

// this does not cut it
return new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.WithProperty(Serilog.Core.Constants.SourceContextPropertyName, "default")
.Enrich.When(Matching.FromSource("default"),
enrichmentConfig => enrichmentConfig.WithAnyKindOfEnricher());


希望我能够解释我想要实现的目标。 (为了清晰起见,lambda 参数名称很长)

那么,我错过了什么还是有其他方法?如何最好地实现这种“排除致富”?


稍后编辑:
- 忘记提及我仅记录到文件(使用文件接收器)。
- 不打算集成 Seq(我知道它的优点),至少在不久的将来不会。

最佳答案

Serilog.Filters.Expressions这样做更好:

        // dotnet add package serilog.filters.expressions
.Enrich.When(
"SourceContext <> 'ASP.global_asax'"),
enrichmentConfig => enrichmentConfig.WithAnyKindOfEnricher());

关于logging - 当源上下文不是特定值时,最好的丰富方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61444513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com