可以像这样配置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>
rules的final
关键字可以为以下内容使用单独的目标:
Microsoft.EntityFrameworkCore.*
记录器Microsoft.*
记录器配置简单明了,我可以在不修改所有其他规则的情况下轻松添加其他条件。
使用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();
要添加其他条件,我必须将其从所有其他过滤器中排除。
问题:我是否遗漏了某些东西,或者如果匹配的话,没有简单的方法可以跳过其他规则?
答案 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() { };