【问题标题】:How do I filter out some logs?如何过滤掉一些日志?
【发布时间】:2021-12-27 09:35:50
【问题描述】:

因为一些程序集有嘈杂的日志,我只想得到警告、错误和致命日志消息。

这是我的代码,有什么问题?

Log.Logger = new LoggerConfiguration()
    .Enrich.FromLogContext()
    .CreateBootstrapLogger();

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseSerilog((context, services, cfg) => cfg
    .ReadFrom.Configuration(context.Configuration)
    .ReadFrom.Services(services)
    .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
    .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
    .MinimumLevel.Information()
    .Enrich.WithProperty("Version", Assembly.GetEntryAssembly()?.GetName().Version?.ToString())
    .Enrich.FromLogContext()
    .WriteTo.Logger(lc =>
    {
        lc.WriteTo.Console();
    })
    .WriteTo.Logger(lc =>
    {
        lc.Filter.ByExcluding(x =>
                x.Properties.ContainsKey("SourceContext") &&
                x.Properties["SourceContext"].ToString() == "Marvin.Cache.Headers.HttpCacheHeadersMiddleware" &&
                x.Level is LogEventLevel.Verbose or LogEventLevel.Debug or LogEventLevel.Information)
            .WriteTo.MongoDBBson(mongoDbCfg =>
            {
                // db option...
            });
    }));

但我的数据库中仍有Marvin.Cache.Headers.HttpCacheHeadersMiddleware 信息日志

日志

{
    "_id" : ObjectId("61c981a91ba9664afac0778c"),
    "Level" : "Information",
    "UtcTimeStamp" : ISODate("2021-12-27T09:04:40.674Z"),
    "MessageTemplate" : {
        "Text" : "Vary header generated: Accept, Accept-Language, Accept-Encoding.",
        "Tokens" : [ 
            {
                "_t" : "TextToken",
                "StartIndex" : 0,
                "Text" : "Vary header generated: Accept, Accept-Language, Accept-Encoding."
            }
        ]
    },
    "RenderedMessage" : "Vary header generated: Accept, Accept-Language, Accept-Encoding.",
    "Properties" : {
        "SourceContext" : "Marvin.Cache.Headers.HttpCacheHeadersMiddleware",
        "RequestId" : "0HME92VII1HBR:00000007",
        "RequestPath" : "/api/Audio",
        "ConnectionId" : "0HME92VII1HBR",
        "Version" : "2.0.5.8031"
    },
    "Exception" : {
        "_csharpnull" : true
    }
}

【问题讨论】:

    标签: asp.net serilog


    【解决方案1】:

    通过我这几天的调试,发现x.Properties["SourceContext"].ToString()的值有引号,这不是一个好找的问题。

    所以我更新的代码如下所示。

        Func<LogEvent, bool> logFilter = x => x.Properties.ContainsKey("SourceContext") &&
                                              x.Properties["SourceContext"] is ScalarValue
                                              {
                                                  Value: "Marvin.Cache.Headers.HttpCacheHeadersMiddleware"
                                              } &&
                                              (x.Level is LogEventLevel.Verbose or LogEventLevel.Debug
                                                  or LogEventLevel.Information);
    
    lc.Filter.ByExcluding(logFilter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-03
      • 2013-12-16
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多