【问题标题】:How to filter aspnet core logs?如何过滤aspnet核心日志?
【发布时间】:2020-12-04 21:31:06
【问题描述】:

以下样板,Microsoft 为 ASP.NET Core 2.1 提供的 C# 代码应防止仅写入信息日志。但事实并非如此。

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            var env = hostingContext.HostingEnvironment;
            config.AddEnvironmentVariables();
        })
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.AddConsole();
            logging.AddDebug();
            logging.AddEventSourceLogger();
        })
        .ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Warning))
        .UseStartup<Startup>();

我仍然看到如下消息:

MyApp> 信息: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[2]

Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:信息: 11.2286ms 内执行的动作/Index

我特意删除了(暂时)调用 AppSettings.json 的代码。为什么我仍然看到信息严重性日志项?

【问题讨论】:

标签: c# logging asp.net-core-2.0


【解决方案1】:

在你的代码中尝试如下更改,设置第一个 AddFilter 的类别为 null

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;
                config.AddEnvironmentVariables();
            })
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole();
                logging.AddFilter(null, LogLevel.Warning);

            })
            .UseStartup<Startup>()
            .ConfigureLogging(logging => logging.AddFilter("Microsoft", LogLevel.Warning));

在 Home/Index 中添加 logWarning 以进行测试

 private readonly ILogger _logger;
    public IndexModel(ILogger<IndexModel> logger)
    {
        _logger = logger;
    }
    public void OnGet()
    {
        _logger.LogInformation("Log Information");
        _logger.LogWarning("Log Warning");
    }

结果截图

【讨论】:

  • 代码很好,很清晰。看起来我们只能抑制(过滤)将在我们自己的代码中创建的日志项。我希望阻止 VS 在我的代码运行时生成的信息日志项。警告和更糟的,很好,但不是所有其他的。
  • 我也在为同样的事情苦苦挣扎。无法摆脱那些微软/系统日志。
【解决方案2】:

对我来说,它使用 AddFilter() 通用方法工作(我正在使用 ASP.Net Core 3.1)。我正在登录到 Windows 事件日志,我只希望那里出现警告和错误。 因此,我在 EventLogLoggerProvider 中添加了一个过滤器,以仅记录来自“Microsoft”类别的警告。

services.AddLogging(logging =>
        {
            logging.AddEventLog(eventLogSettings =>
            {
                eventLogSettings.LogName = Constants.Service.EventLogName;
                eventLogSettings.SourceName = Constants.Service.EventSourceName;
            });
            logging.AddFilter<EventLogLoggerProvider>("Microsoft", LogLevel.Warning);
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多