日志记录Logging
提示
可在 GitHub 上查看此文章的示例。
ASP.NET Core应用程序ASP.NET Core applications
使用 AddDbContext
或 AddDbContextPool
时,EF Core 会自动与 ASP.NET Core 的日志记录机制集成。 因此,在使用 ASP.NET Core 时,应按ASP.NET Core 文档中所述配置日志记录。
其他应用程序Other applications
EF Core 日志记录要求使用一个或多个日志记录提供程序配置的 ILoggerFactory。 以下包中随附有常见提供程序:
- “”。控制台:一个简单的控制台记录器。
- AzureAppServices:支持 Azure 应用服务 “诊断日志” 和 “日志流” 功能。
- 使用 system.exception ()将日志记录到调试器监视器中的日志记录。
- 对 Windows 事件日志的日志记录。事件日志。
- EventListener:支持 EventSource/ 。
- TraceSource:使用
System.Diagnostics.TraceSource.TraceEvent()
将日志记录到跟踪侦听器。
安装适当的包后,应用程序应创建 Server.loggerfactory 的单一实例/全局实例。 例如,使用控制台记录器:
public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder => { builder.AddConsole(); });
备注
下面的代码示例使用在版本2.2 中已过时的 ConsoleLoggerProvider
构造函数并在3.0 中替换。 使用2.2 时,可以安全地忽略和禁止显示警告。
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");
警告
应用程序不应为每个上下文实例创建新的 ILoggerFactory 实例,这一点非常重要。 这样做会导致内存泄漏和性能下降。
筛选记录内容Filtering what is logged
应用程序可以通过在 ILoggerProvider 上配置筛选器来控制要记录的内容。 例如:
public static readonly ILoggerFactory MyLoggerFactory
= LoggerFactory.Create(builder =>
{
builder
.AddFilter((category, level) =>
category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information)
.AddConsole();
});
备注
下面的代码示例使用在版本2.2 中已过时的 ConsoleLoggerProvider
构造函数并在3.0 中替换。 使用2.2 时,可以安全地忽略和禁止显示警告。
public static readonly LoggerFactory MyLoggerFactory
= new LoggerFactory(new[]
{
new ConsoleLoggerProvider((category, level)
=> category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information, true)
});
在此示例中,将筛选日志以仅返回消息:
- 在 “Microsoft.entityframeworkcore” 类别中
- 在 “信息” 级别
对于 EF Core,记录器类别在 DbLoggerCategory
类中定义,以方便查找类别,但这些类别解析为简单字符串。
有关基础日志记录基础结构的更多详细信息,请参阅ASP.NET Core 日志记录文档。