如何在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)配置
这种方式更灵活,无需修改代码即可调整日志规则:
- 在
appsettings.json中添加日志配置:
{ "Logging": { "EventLog": { "LogLevel": { "Default": "Warning", "LogTest": "Information" } }, "Console": { "LogLevel": { "Default": "Information" } } } }
- 修改
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
相关产品推荐
相关产品推荐

