Запретить отображение SQL-запросов в моем журнале

#c# #.net #asp.net-core #.net-core #serilog

Вопрос:

Я использую Serilog для входа в свое консольное приложение. Я настроил его следующим образом.

 // Build configuration
IConfiguration configuration = new ConfigurationBuilder()
    .SetBasePath(ApplicationInfo.DataPath)
    .AddJsonFile("appsettings.json", false, false)
    .Build();

// Configure Serilog
string logFormat = "[{Timestamp:yyyy-MM-dd hh:mm:ss tt}][{Level:u3}] {Message:lj}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .WriteTo.Console(LogEventLevel.Verbose, logFormat)
    .WriteTo.File(ApplicationInfo.GetDataFileName("log"), LogEventLevel.Verbose, logFormat)
    .CreateLogger();

AppHost = Host.CreateDefaultBuilder(args)
    .ConfigureServices((context, services) =>
    {
        services.AddDbContext<TTApplicationDbContext>(options =>
        {
            options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
        });
        services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));
        services.Configure<SftpSettings>(configuration.GetSection("FtpSettings"));
    })
    .UseSerilog()
    .Build();
 

И в моем файле appsettings.json.

 "Serilog": {
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning"
    }
  }
}
 

Это работает нормально, за исключением того, что в моем журнале, по-видимому, отображаются SQL-запросы, связанные с исключениями Entity Framework.

Я не хочу изменять уровень журнала. Я хочу получить регистрацию этих ошибок. Я просто не хочу, чтобы включались фактические SQL-запросы. Это даже не вопрос безопасности. Они просто слишком многословны и затрудняют поиск фактических ошибок.

В моем ASP.NET Основные приложения, я должен добавить следующую строку, чтобы включить SQL — запросы в ведение журнала.

 builder.EnableSensitiveDataLogging();
 

Мне нужно обратное для моего консольного приложения.

Примечание: Пожалуйста, не спешите помечать как дубликат. Я нашел похожие вопросы, но не смог найти ни одного, который прямо ответил бы на то, о чем я спрашиваю.

Комментарии:

1. Вы можете добавить проверку среды, если отладка, а затем добавить конструктор. Функция enablesensitivedatalogg (), если она находится в выпуске или производстве, она не добавит эту информацию, так как отладка будет только для разработчика !

2. @Халеддехия: Вы неправильно истолковали вопрос. Я не хочу EnableSensitiveDataLogging() . Я хочу противоположного этому.

3. спасибо за разъяснение, кстати , я имел в виду среду разработки, а не отладку, моя плохая

4. Какие расширения Serilog вы используете?

5. @TiesonT.: Все это в моем коде. Во втором блоке я настраиваю Serilog.

Ответ №1:

Вы можете отфильтровать конкретное пространство имен, которое генерирует команды SQL, и переопределить

 // Configure Serilog
string logFormat = "[{Timestamp:yyyy-MM-dd hh:mm:ss tt}][{Level:u3}] {Message:lj}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .WriteTo.Console(LogEventLevel.Verbose, logFormat)
    .WriteTo.File(ApplicationInfo.GetDataFileName("log"), LogEventLevel.Verbose, logFormat)
    .MinimumLevel.Verbose().MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Command", Serilog.Events.LogEventLevel.Warning)
        .MinimumLevel.Verbose().MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Query", Serilog.Events.LogEventLevel.Warning)
                .CreateLogger();
 

Комментарии:

1. Это просто блокирует ведение журнала из этого источника. Как указано в моем вопросе, я все еще хочу знать об исключении. Мне просто не нужны все SQL-запросы.

2. Я обновил ответ на вашу потребность. Вам нужно будет перезаписать подробный минимальный уровень …

3. Опять же, я все еще хочу исключений. Поэтому я не хочу менять фильтр исключений.

4. Обновленный ответ-это именно то, что он есть, он скроет инструкцию sql в обычной ситуации, но отобразится, когда появится предупреждение, ошибка , фатальная ситуация . Это не скрывает весь вывод. Попробуйте увидеть результат.