EF Core(Entity Framework Core)에는 로그 생성, 이벤트에 응답 및 진단 가져오기를 위한 몇 가지 메커니즘이 포함되어 있습니다. 이러한 각 항목은 다양한 상황에 맞게 조정되며, 여러 메커니즘이 작동할 수 있는 경우에도 작업에 가장 적합한 메커니즘을 선택하는 것이 중요합니다. 예를 들어 데이터베이스 인터셉터를 사용하여 SQL을 기록할 수 있지만 로깅에 맞게 조정된 메커니즘 중 하나에서 더 잘 처리할 수 있습니다. 이 페이지에서는 이러한 각 메커니즘에 대한 개요를 제공하고 각 메커니즘을 사용해야 하는 시기를 설명합니다.
빠른 참조
아래 표에서는 여기에 설명된 메커니즘 간의 차이점에 대한 빠른 참조를 제공합니다.
| 메커니즘 | 비동기 | Scope | 등록됨 | 올바른 사용법 |
|---|---|---|---|---|
| 단순 로깅 | No | 컨텍스트별 | 컨텍스트 구성 | 개발 중 로깅 |
| Microsoft.Extensions.Logging | No | 컨텍스트별* | D.I. 또는 컨텍스트 구성 | 프로덕션 로깅 |
| Events | No | 컨텍스트별 | 언제든지 | EF 이벤트에 대응 |
| 인터셉터 | 예 | 컨텍스트별 | 컨텍스트 구성 | EF 작업 조작 |
| 진단 수신기 | No | 프로세스 | 세계적으로 | 애플리케이션 진단 |
*일반적으로 Microsoft.Extensions.Logging 종속성 주입을 통해 애플리케이션별로 구성됩니다. 그러나 EF 수준에서는 필요한 경우 각 컨텍스트를 다른 로거로 구성할 수 있습니다 .
간단한 로깅
EF Core 로그는 LogTo 때 을(를) 사용하여 모든 유형의 애플리케이션에서 액세스할 수 있습니다. 이 구성은 일반적으로 DbContext.OnConfiguring의 재정의에서 이루어집니다. 다음은 그 예입니다.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.LogTo(Console.WriteLine);
이 개념은 EF6에서와 비슷합니다 Database.Log .
자세한 내용은 간단한 로깅 을 참조하세요.
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging 은 많은 일반적인 로깅 시스템에 대한 플러그 인 공급자를 사용하는 확장 가능한 로깅 메커니즘입니다. EF Core는 Microsoft.Extensions.Logging 완전히 통합되며 이 형태의 로깅은 기본적으로 ASP.NET Core 애플리케이션에 사용됩니다.
자세한 내용은 EF Core에서 Microsoft.Extensions.Logging 사용을 참조하세요.
Events
EF Core는 EF Core 코드에서 특정 작업이 발생할 때 콜백 역할을 하는 .NET 이벤트를 노출합니다. 이벤트는 인터셉터보다 간단하고 보다 유연한 등록을 허용합니다. 그러나 동기화 전용이므로 비차단 비동기 I/O를 수행할 수 없습니다.
이벤트는 DbContext 인스턴스별로 등록되며 이 등록은 언제든지 수행할 수 있습니다. 진단 수신기를 사용하여 프로세스의 모든 DbContext 인스턴스에 대해 동일한 정보를 가져옵니다.
자세한 내용은 EF Core의 .NET 이벤트를 참조하세요.
인터셉션
EF Core 인터셉터는 EF Core 작업의 가로채기, 수정 및/또는 억제를 지원합니다. 여기에는 명령 실행과 같은 하위 수준 데이터베이스 작업뿐만 아니라 SaveChanges 호출과 같은 상위 수준 작업이 포함됩니다.
인터셉터는 로그 및 진단과는 달리 가로채진 작업을 수정하거나 억제할 수 있습니다. 간단한 로깅 또는 Microsoft.Extensions.Logging 은 로깅에 더 적합합니다.
인터셉터는 컨텍스트가 구성될 때 DbContext 인스턴스별로 등록됩니다. 진단 수신기를 사용하여 프로세스의 모든 DbContext 인스턴스에 대해 동일한 정보를 가져옵니다.
자세한 내용은 인터셉션 을 참조하세요.
진단 수신기
진단 수신기를 사용하면 현재 .NET 프로세스에서 발생하는 EF Core 이벤트를 수신 대기할 수 있습니다.
진단 수신기는 단일 DbContext 인스턴스에서 이벤트를 가져오는 데 적합하지 않습니다. EF Core 인터셉터는 컨텍스트별 등록을 사용하여 동일한 이벤트에 대한 액세스를 제공합니다.
진단 수신기는 로깅용으로 설계되지 않았습니다. 간단한 로깅 또는 Microsoft.Extensions.Logging 은 로깅에 더 적합합니다.
자세한 내용은 EF Core에서 진단 수신기 사용을 참조하세요.
.NET