로깅Logging

GitHub에서 이 문서의 샘플을 볼 수 있습니다.You can view this article's sample on GitHub.

응용 프로그램 ASP.NET CoreASP.NET Core applications

EF Core AddDbContext 은 또는가 사용 될 때마다 ASP.NET Core의 로깅 메커니즘과 자동으로 통합 AddDbContextPool 됩니다.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. 따라서 ASP.NET Core를 사용 하는 경우 ASP.NET Core 설명서에 설명 된 대로 로깅을 구성 해야 합니다.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

다른 애플리케이션Other applications

EF Core 로깅에는 하나 이상의 로깅 공급자를 사용 하 여 구성 된 ILoggerFactory가 필요 합니다.EF Core logging requires an ILoggerFactory which is itself configured with one or more logging providers. 공통 공급자는 다음 패키지에 제공 됩니다.Common providers are shipped in the following packages:

적절 한 패키지를 설치한 후 응용 프로그램은 Server.loggerfactory의 단일/전역 인스턴스를 만들어야 합니다.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. 예를 들어 콘솔로 거를 사용 합니다.For example, using the console logger:

public static readonly ILoggerFactory MyLoggerFactory
    = LoggerFactory.Create(builder => { builder.AddConsole(); });

그런 다음이 단일/전역 인스턴스를에 EF Core 등록 해야 합니다 DbContextOptionsBuilder .This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. 예를 들면 다음과 같습니다.For example:

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 인스턴스를 만들지 않는 것이 매우 중요 합니다.It is very important that applications do not create a new ILoggerFactory instance for each context instance. 이렇게 하면 메모리 누수가 발생 하 고 성능이 저하 됩니다.Doing so will result in a memory leak and poor performance.

기록 되는 내용 필터링Filtering what is logged

응용 프로그램은 ILoggerProvider에 대 한 필터를 구성 하 여 로깅되는 내용을 제어할 수 있습니다.The application can control what is logged by configuring a filter on the ILoggerProvider. 예를 들면 다음과 같습니다.For example:

public static readonly ILoggerFactory MyLoggerFactory
    = LoggerFactory.Create(builder =>
        {
            builder
                .AddFilter((category, level) =>
                    category == DbLoggerCategory.Database.Command.Name
                    && level == LogLevel.Information)
                .AddConsole();
        });

이 예에서는 로그를 필터링 하 여 메시지만 반환 합니다.In this example, the log is filtered to only return messages:

  • ' Microsoft.entityframeworkcore.tools.dotnet ' 범주에 있습니다.in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • ' 정보 ' 수준에서at the 'Information' level

EF Core에서로 거 범주는 DbLoggerCategory 범주를 쉽게 찾을 수 있도록 클래스에 정의 되어 있지만 단순 문자열로 확인 됩니다.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

기본 로깅 인프라에 대 한 자세한 내용은 ASP.NET Core 로깅 설명서에서 찾을 수 있습니다.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.