如何关闭ASP.NET MVC默认日志记录器?
移除ASP.NET MVC默认日志输出,保留Serilog日志
针对ASP.NET MVC同时输出Serilog和默认日志的问题,可通过以下步骤彻底禁用默认日志:
1. 修改Web.config,清除默认Trace监听器
ASP.NET MVC的默认日志大多通过System.Diagnostics.Trace输出,直接在配置文件中清空监听器是最可靠的方式:
<configuration> <system.diagnostics> <trace> <listeners> <clear /> <!-- 清空所有默认监听器 --> </listeners> </trace> </system.diagnostics> <system.web> <trace enabled="false" pageOutput="false" /> <!-- 禁用ASP.NET内置的页面Trace输出 --> </system.web> </configuration>
2. 调整SerilogWebClassic配置,避免重复输出
确保Serilog不会将日志回写到Trace,同时接管所有请求日志:
Log.Logger = new LoggerConfiguration() .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {Message:lj}{NewLine}{Exception}") .ReadFrom.AppSettings() .CreateLogger(); SerilogWebClassic.Configure(cfg => cfg .UseLogger(Log.Logger) .EnrichFromHttpRequest() .WriteToDiagnosticsTrace(false) // 禁止Serilog将日志输出到Trace,避免冗余 );
3. 补充:在Application_Start末尾移除残留监听器
如果Web.config修改后仍有默认日志输出,可在Global.asax.cs的Application_Start方法最后添加代码,确保所有初始化完成后清除监听器:
protected void Application_Start() { // 其他初始化代码... // 清除Trace监听器 System.Diagnostics.Trace.Listeners.Clear(); }
说明
之前调用System.Diagnostics.Trace.Listeners.Clear()无效,是因为ASP.NET在应用启动过程中可能会自动重新添加默认监听器,因此需要通过Web.config提前禁用,或在所有初始化完成后执行清除操作。
内容的提问来源于stack exchange,提问作者Oleksiy
相关产品推荐
相关产品推荐

