2017-02-07 46 views
5

我有一个使用实体框架核心的控制台.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查询记录(仅在调试日志级别记录它们)

回答

3

你想更改Serilog配置以将Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory上下文的最小级别设置为Warning或更高。

通过将输出模板设置为[{Timestamp:HH:mm:ss} {SourceContext} [{Level}] {Message}{NewLine}{Exception}之类的东西,您可以找到需要更改的上下文。一旦你知道了上下文,你可以将模板设置回原来的样子。

+0

我已经成功地完全排除上下文/来源: '.Filter.ByExcluding(Matching.FromSource(“Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory”))' 但不知道如何设置最低水平 –

+1

如果你正在做代码配置,你应该可以做一些像'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

+0

这些细节为答案增加了很多实用价值。 我试过它从代码,它的工作原理。谢谢!我会稍后尝试JSON配置,并确定它是首选方式,因为您有日志选项的外部控制。 –