2017-02-07 21 views
5

Mam konsolową aplikację .net core, która wykorzystuje rdzeń struktury encji. Aplikacja wykorzystuje ramy rejestrowania się zapisać do pliku i konsola:Wyłączenie rejestrowania zapytań SQL w rdzeniu Entity Framework

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>(); 

Min Level dla pliku wyjściowego jest ustawiony do informacji. Ale z tego wyjście konfiguracja zawiera również zapytań SQL, oto przykład:

2017-02-06 10: 31: 38.282 -08: 00 [Informacje] Zrealizowane DbCommand (0ms) [Parametry = [] CommandType = 'Text', CommandTimeout = '30 '] SELECT [f]. [BuildIdentifier], [f]. [Branch], [f]. [BuildDate], [f]. [StaticAssetSizeInKb] OD [FileSizesHistoryEntries] AS [f]

Czy istnieje sposób, aby wyłączyć zapytań SQL logowaniem (log je tylko poziomu dziennika Debug)

Odpowiedz

3

chcesz zmień konfigurację Serilog, aby ustawić minimalny poziom dla kontekstu Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory na Warning lub wyższy.

Możesz znaleźć kontekst, który należy zmienić, ustawiając szablon wyjściowy na wartość podobną do [{Timestamp:HH:mm:ss} {SourceContext} [{Level}] {Message}{NewLine}{Exception}. Po poznaniu kontekstu możesz ustawić szablon z powrotem do tego, jak było wcześniej.

+0

udało mi się wykluczyć całkowicie kontekstowe/źródło: '.Filter.ByExcluding (Matching.FromSource („Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory”))' ale nie wiem jak ustawić minimalny poziom –

+1

Jeśli robisz konfigurację z kodu, powinieneś być w stanie zrobić coś takiego jak 'nowa LoggerConfiguration(). MinimumLevel.Information(). MinimumLevel.Override (" Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory ", LogEventLevel.Warning) ? Zwykle konfiguruję to z Serilog.Settings.Configuration JSON: '{" Serilog ": {" MinimumLevel ": {" Default ":" Information "," Override ": {" Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory ":" Warning " }}}} ' – mdonoughe

+0

Te szczegóły dodały wiele praktycznej wartości do odpowiedzi. Próbowałem go od kodu i działa. Dzięki! Spróbuję później konfiguracji JSON i na pewno jest to preferowany sposób, ponieważ masz kontrolę zewnętrzną nad opcjami rejestrowania. –