如何阻止.NET框架自动向控制台输出内部日志内容?
原因
你使用的Host.CreateDefaultBuilder方法默认会自动注册控制台、调试、事件源等多个内置日志提供者,EF Core等框架组件默认会将运行日志输出到已注册的日志提供者中,所以即使你没有主动配置日志,也会出现框架日志打印到控制台的情况。你自定义的ConsoleLogger没有接入.NET官方日志体系,所以不受该配置影响。
可选解决方案
方案1:完全关闭所有框架控制台日志(最彻底)
直接在调用Configure方法的最后一个空委托中添加日志配置,清空所有默认注册的日志提供者即可:
builder => { builder.ConfigureLogging(logging => { // 移除所有默认注册的日志提供者 logging.ClearProviders(); // 可选:将全局最低日志级别设为最高,完全阻止框架日志生成 logging.SetMinimumLevel(LogLevel.None); }); }
方案2:仅关闭EF Core的SQL查询日志
如果你只需要隐藏EF生成的SQL语句,不需要关闭所有框架日志,可以在配置DbContext时指定空日志工厂:
services.AddDbContext<ApplicationDbContext>(options => { options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")) // 传入空日志工厂,EF不会输出任何日志 .UseLoggerFactory(LoggerFactory.Create(_ => { })); });
方案3:通过配置文件修改日志级别
不需要改代码,直接在项目的appsettings.json中调整日志级别即可:
{ "Logging": { "LogLevel": { "Default": "None", "Microsoft": "None", "Microsoft.EntityFrameworkCore": "None", "System": "None" } } }
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

