首先
在 EntityFrameworkCore中安裝 Microsoft.Extensions.Logging.Console
nuget install Microsoft.Extensions.Logging.Console
按照官方文檔 使用UseLoggerFactory 方法 (地址:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/logging)
安裝相應的程序包之后, 該應用程序應創建 LoggerFactory 的單一實例/全局實例。 例如,使用控制台記錄器:
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});
然后,應該在 DbContextOptionsBuilder 上向 EF Core 注冊此單一實例/全局實例。 例如:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
篩選SQL內容
篩選所記錄內容的最簡單方法是在注冊 ILoggerProvider 時對其進行配置。 例如:
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[]
{
new ConsoleLoggerProvider((category, level)
=> category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information, true)
});
文檔提醒:
下面的代碼示例使用ConsoleLoggerProvider已過時版本 2.2 中的構造函數。 適當替換已過時的日志記錄 Api 將在版本 3.0 中提供。 在此期間,則可以安全地忽略,並禁止顯示警告。
錯誤可以忽略,.net core 3.0 api會發生改變,這種方法只能在2.0使用!
在此示例中,篩選日志以僅返回以下位置的消息:
在 Microsoft.EntityFrameworkCore.Database.Command 類別中
在信息級別
對於 EF Core 記錄器類別在中定義DbLoggerCategory類,以便可以方便地查找類別,但這些解析為簡單的字符串。
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[]
{
new ConsoleLoggerProvider((category, level)
=> category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information, true)
});
public override void PreInitialize()
{
if (!SkipDbContextRegistration)
{
Configuration.Modules.AbpEfCore().AddDbContext(options =>
{
if (options.ExistingConnection != null)
{
AbpVueDbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection);
}
else
{
AbpVueDbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString);
}
options.DbContextOptions.UseLoggerFactory(MyLoggerFactory);
options.DbContextOptions.EnableSensitiveDataLogging(true); //logging 不加密 development使用 !
});
}
}
效果如圖: