我有一个使用实体框架核心的控制台.net核心应用程序。 应用程序使用日志框架写入文件和控制台:抑制登录到实体框架核心的SQL查询
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年2月6日10:31:38.282 -08:00 [信息]已执行的DbCommand(0毫秒) [参数= [], CommandType ='Text',CommandTimeout = '30'] SELECT [f]。[BuildIdentifier],[f]。[Branch],[f]。[BuildDate], [f]。[StaticAssetSizeInKb] FROM [FileSizesHistoryEntries] AS [F]
有没有一种方法来禁用SQL查询记录(仅在调试日志级别记录它们)
我已经成功地完全排除上下文/来源: '.Filter.ByExcluding(Matching.FromSource(“Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory”))' 但不知道如何设置最低水平 –
如果你正在做代码配置,你应该可以做一些像'new LoggerConfiguration()。MinimumLevel.Information()。MinimumLevel.Override(“Microsoft.EntityFrameworkCore.Storage.IReallationalCommandBuilderFactory”,LogEventLevel.Warning)' ?我通常从Serilog.Settings.Configuration配置JSON:{“Serilog”:{“MinimumLevel”:{“Default”:“Information”,“Override”:{“Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory”:“Warning” }}}}' – mdonoughe
这些细节为答案增加了很多实用价值。 我试过它从代码,它的工作原理。谢谢!我会稍后尝试JSON配置,并确定它是首选方式,因为您有日志选项的外部控制。 –