You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core 7中禁用EventLog自动日志写入?

解决ASP.NET Core 7 Web API Windows EventLog 自动日志过滤问题

问题场景

需要ASP.NET Core 7 Web API向Windows EventLog写入Information级别的自定义日志,但每次请求Get()动作时,EventLog会自动生成7条左右的系统日志(如请求完成、端点执行、动作执行等日志),希望禁用这些自动日志,同时保留自定义的Information日志。

当前尝试的全局级别过滤eventLogSettings.Filter = (x, y) => y >= LogLevel.Warning;会同时过滤掉自定义的Information日志,无法满足需求。

解决方案

核心思路是按日志类别精准过滤:那些自动生成的系统日志来自Microsoft.AspNetCore命名空间下的类别,而自定义日志来自你的应用程序命名空间,只需针对不同类别设置不同的日志级别即可。

方法1:通过代码配置过滤规则

修改Program.cs,移除EventLog的全局级别过滤,改用AddFilter针对不同日志类别设置级别:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

builder.Logging.AddEventLog(eventLogSettings =>
{
    eventLogSettings.LogName = "LogTest";
    eventLogSettings.SourceName = "Test1";
});

// 过滤Microsoft.AspNetCore相关的Information级日志(禁用自动生成的系统日志)
builder.Logging.AddFilter("Microsoft.AspNetCore", LogLevel.Warning);
// 允许应用程序命名空间下的Information级日志输出(自定义日志)
builder.Logging.AddFilter("LogTest", LogLevel.Information);

builder.Services.AddControllers();
var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

方法2:通过配置文件(appsettings.json)配置

这种方式更灵活,无需修改代码即可调整日志规则:

  1. 在appsettings.json中添加日志配置:
{
  "Logging": {
    "EventLog": {
      "LogLevel": {
        "Default": "Warning",
        "LogTest": "Information"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}
  1. 修改Program.cs,移除手动的过滤代码,让配置文件生效:
var builder = WebApplication.CreateBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Logging.AddEventLog(eventLogSettings =>
{
    eventLogSettings.LogName = "LogTest";
    eventLogSettings.SourceName = "Test1";
});

builder.Services.AddControllers();
var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

原理说明

  • 自动生成的系统日志(如请求完成、端点执行)的日志类别均以Microsoft.AspNetCore开头,将这些类别的日志级别设为Warning及以上,即可过滤掉它们的Information级日志。
  • 自定义日志的类别为你的应用程序命名空间(如LogTest.Controllers.WeatherForecastController),设置该命名空间的日志级别为Information及以上,就能让_logger.LogInformation("My Log Test");正常输出到EventLog。

内容的提问来源于stack exchange,提问作者AG70

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:40:46