替代Serilog的NLog"最终"规则

时间:2017-12-14 11:24:27

标签: c# logging nlog serilog

可以像这样配置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. 所有其他记录器
  4. 配置简单明了,我可以在不修改所有其他规则的情况下轻松添加其他条件。

    使用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();
    

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

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

1 个答案:

答案 0 :(得分:1)

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

 foreach (var url in Sources_URL)
 {
     names.Add("------- Do stuff for : " + url.url_root);
     // Some Stuff
     myListView.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate)
 }

private static Action EmptyDelegate = delegate() { };