我有一個使用實體框架核心的控制檯.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配置,並確定它是首選方式,因爲您有日誌選項的外部控制。 –