.net core 5.0 ef core 쿼리 로그 Production 에서 안되게 하는 방법 문의 드립니다.

안녕하세요. ef 쿼리가 의도에 맞는지 로그를 남기게 해두었습니다.
문제는 이걸 운영에서는 안 남게 하고 싶은데요.
질문은 아래쪽에 있습니다.

환경에 따라 아래처럼 config 를 분리 해두었습니다. (이렇게 하는 것이 맞는지 모르겠네요.)

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, 
    ILoggerFactory logger)
{
    if (env.IsDevelopment())
    {
        logger.AddLog4Net("log4net.Development.config");
    }
    else if (env.IsProduction())
    {
        logger.AddLog4Net("log4net.Production.config");
    }
    else
    {
        logger.AddLog4Net("log4net.config");
    }
}

질문: 아래와 같이 할경우, 기본 log4net.config (왜 여기에 남을까요?) 에 있는 경로에 아래와 같이 ef 쿼리로그가 남습니다.
2022-03-12 15:48:58,621 [7] INFO Microsoft.EntityFrameworkCore.Database.Command

생각대로라면 appsetting.Production 에 값을 넣어 두고, 그 값이 있으면, UseLoggerFactory 를 패스 시키면 될거 같은데요. 먼가 다른 깔끔한 방법이 없을까요?

public void ConfigureServices(IServiceCollection services)
{
    string mySqlConnectionStr = Configuration["DB:dbConn"];
    ServerVersion serverVersion = new MySqlServerVersion(ServerVersion.AutoDetect(mySqlConnectionStr));
    
    // appsetting.Production 에 값을 세팅해서 Production 일때는 쿼리 로그 패스 하게 하는게 맞는건가?
    // mysql 로그가 log4net.config 에 세팅된 경로로 쌓임 
    services.AddDbContext<DabomeContext>(options => options.UseMySql(mySqlConnectionStr, serverVersion).UseLoggerFactory(LoggerFactory.Create(p => p.AddLog4Net())).EnableSensitiveDataLogging()
            .EnableDetailedErrors());
}
1개의 좋아요

제가 알기로도 말씀하신 방법이 최선인 것 같아요.

그런데 혹시 모르니 로깅레벨도 한번 살펴보시겠어요?
DB쪽은 어떻게 로깅되는지 잘 모르겠지만 한번 살펴보는 것도 좋을 것 같아요.

1개의 좋아요

.NET의 LoggerFactory는 상당한 Configuration이 가능한 개체입니다.
이곳에서 Logger의 구성 설정을 확인해보세요.

아마 제 생각에는 로그 프로바이더, 로그 범주, 로그레벨 설정으로 풀이가 가능한 시나리오 같아보입니다.

1개의 좋아요