gpt4 book ai didi

c# - NLog "final"规则的 Serilog 替代方案

转载 作者:行者123 更新时间:2023-11-30 17:31:28 27 4
gpt4 key购买 nike

可以这样配置 NLog:

<rules>
<logger name="Microsoft.EntityFrameworkCore.*" minlevel="Trace" writeTo="file-ef" final="true" />
<logger name="Microsoft.*" minlevel="Trace" writeTo="file-http,console" final="true" />
<logger name="*" minlevel="Trace" writeTo="file,console" />
</rules>

rulesfinal 关键字使使用单独目标的可能性成为可能:

  1. Microsoft.EntityFrameworkCore.* 记录器
  2. 其他 Microsoft.* 记录器
  3. 所有其他记录器

配置简单明了且合乎逻辑,我可以轻松添加另一个条件而无需修改所有其他规则。

要用 Serilog 做同样的事情,我必须编写以下代码:

const string format = "[{Timestamp:HH:mm:ss.fff} {ThreadId} {Level:u3}] {Message:lj} [{SourceContext}] {NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.Enrich.FromLogContext()
.Enrich.WithThreadId()
.WriteTo.Console(outputTemplate: format)
.WriteTo.Logger(cfg => cfg
.Filter.ByIncludingOnly(Matching.FromSource("Microsoft.AspNetCore"))
.WriteTo.RollingFile(@"logs\{Date}.http.log", outputTemplate: format, retainedFileCountLimit: null, buffered: true))
.WriteTo.Logger(cfg => cfg
.Filter.ByIncludingOnly(Matching.FromSource("Microsoft.EntityFrameworkCore"))
.WriteTo.RollingFile(@"logs\{Date}.ef.log", outputTemplate: format, retainedFileCountLimit: null, buffered: true))
.WriteTo.Logger(cfg => cfg.Filter
.ByExcluding(Matching.FromSource("Microsoft"))
.WriteTo.RollingFile(@"logs\{Date}.log", outputTemplate: format, retainedFileCountLimit: null, buffered: true))
.CreateLogger();

要添加另一个条件,我必须将其从所有其他过滤器中排除。

问题:我是不是遗漏了什么,或者如果匹配了其他规则,是否没有简单的方法可以跳过?

最佳答案

这不是 Serilog 的 API 特别强大的场景, 但是Serilog.Sinks.Map涵盖这种情况。

    // Install-Package Serilog.Sinks.Map -Pre

var isAsp = Matching.FromSource("Microsoft.AspNetCore");
var isEF = Matching.FromSource("Microsoft.EntityFrameworkCore");
var isMS = Matching.FromSource("Microsoft");

Log.Logger = new LoggerConfiguration()
.WriteTo.Map(le => isAsp(le) ? ".http" :
isEF(le) ? ".ef" :
!isMS(le) ? ".other" :
"",
(slug, wt) => wt.RollingFile($"logs\\{{Date}}{slug}.log"))
.CreateLogger();

关于c# - NLog "final"规则的 Serilog 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812164/

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