2017-02-07 49 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配置,並確定它是首選方式,因爲您有日誌選項的外部控制。 –