我有一个使用实体框架核心的控制台.net核心应用程序.
该应用程序使用日志框架写入文件和控制台:
该应用程序使用日志框架写入文件和控制台:
serviceProvider = new ServiceCollection() .AddLogging() .AddDbContext<DataStoreContext>(options => options.UsesqlServer(Configuration.GetConnectionString("DefaultConnection"))) .BuildServiceProvider(); //configure console logging serviceProvider.GetService<ILoggerFactory>() .AddConsole(LogLevel.Debug) .AddSerilog(); Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.RollingFile(Path.Combine(Directory.GetCurrentDirectory(),"logs/vcibot-{Date}.txt")) .WriteTo.RollingFile(Path.Combine(Directory.GetCurrentDirectory(),"logs/vcibot-errors-{Date}.txt"),LogEventLevel.Error) .CreateLogger(); logger = serviceProvider.GetService<ILoggerFactory>() .CreateLogger<Program>();
文件输出的最低级别设置为“信息”.但是这个设置输出也包含SQL查询,这里是一个例子:
2017-02-06 10:31:38.282 -08:00 [Information] Executed DbCommand (0ms)
[Parameters=[],CommandType=’Text’,CommandTimeout=’30’] SELECT
[f].[BuildIdentifier],[f].[Branch],[f].[BuildDate],
[f].[StaticAssetSizeInKb] FROM [FileSizesHistoryEntries] AS [f]
有没有办法禁用SQL查询日志记录(仅在调试日志级别记录它们)
解决方法
如果您使用的是内置记录器,则可以在Program.cs中为ILoggingBuilder添加过滤器.
所以,它看起来像:
WebHost.CreateDefaultBuilder(args) // ... .ConfigureLogging((context,logging) => { var env = context.HostingEnvironment; var config = context.Configuration.GetSection("Logging"); // ... logging.AddConfiguration(config); logging.AddConsole(); // ... logging.AddFilter("Microsoft.EntityFrameworkCore.Database.Command",LogLevel.Warning); }) // ... .UseStartup<Startup>() .Build();