#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 в обычной ситуации, но отобразится, когда появится предупреждение, ошибка , фатальная ситуация . Это не скрывает весь вывод. Попробуйте увидеть результат.