다음을 통해 공유


로깅 및 가로채기 개요

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에서 진단 수신기 사용을 참조하세요.