Logger Name Leveling¶
로거 이름 레벨링(Logger Name Leveling)은 FoxLogManager
가 GetLogger
메서드 호출시 로거를 찾을 때 단순히 요청된 이름으로만 로거를 찾는 것이 아니라 상위 이름을 가진 로거도 찾아 반환하는 것 말합니다. 예를 들어 사용자가 MyDomain.MyLogger
라는 이름의 로거를 요청한 경우, FoxLogManager
는 MyDomain.MyLogger
라는 이름의 로거를 먼저 찾습니다. 이 이름의 로거가 존재하지 않는 경우 MyDomain
이라는 이름의 로거를 찾으며, 이 로거도 존재하지 않는 경우 대체 로거(fallback logger)를 반환합니다.
Logging Area¶
기업에서 사용하는 대규모 어플리케이션은 여러 영역으로 구분되곤 합니다. 예를 들어, 업무에 따라 인사, 회계, 생산 등의 대분류에서 시작하여, 어느 대분류 내에서 다시 중분류(급여관리, 평가관리 등)의 하위 분류를 가집니다. 이 어플리케이션의 급여관리 업무에서 안정성 문제가 발생한 경우 해당 업무에 대해 로그를 살펴보는 것이 첫번째 방법일 것입니다.
문제가 발생한 업무의 로그를 보기위해서 전체 로그를 켜는 것은 부담으로 작용할 수 있습니다. 일반적으로 개발 시에는 상세한 로그를 남기지만 운영으로 전환되고 안정화 단계를 거치면 로그를 상세하게 기록하지 않는 것이 일반적입니다. 어플리케이션의 특정 영역의 문제를 해결하기 위해 전체 어플리케이션의 로그 기록을 변경하는 것은 합리적이지 않습니다.
Fox Logging의 로거 이름 레벨링은 이러한 상황에 대처하기 위해 제공되는 기능입니다. 어플리케이션이 GetLogger
메서드를 호출하여 로거를 획득할 때 네임스페이스와 유사한 로거 이름을 사용하고, 구성 설정에 로거를 등록할 때 로그를 남기고자 하는 영역의 이름으로 로거를 등록하는 방식으로 로그를 기록할 영역을 지정할 수 있습니다.
Example¶
예를 들어 다음과 같은 코드는 로거의 이름으로 클래스 이름을 사용하여 GetLogger
메서드를 호출합니다. 로그를 기록하는 코드가 클래스 혹은 인터페이스의 전체 이름(fullname)을 사용하여 GetLogger
메서드를 호출하는 것은 로거 이름 레벨링을 사용하는데 매우 중요합니다. 반드시 클래스 혹은 인터페이스 이름을 사용해야 하는 것은 아니지만 네임스페이스와 유사한 단계를 가진 로거 이름을 사용해야 합니다.
Tip
GetLogger<T>
제너릭 메서드 호출은 GetLogger(typeof(T).FullName)
메서드 호출과 동일합니다.
구성 설정에서 HR.Salary.SalaryService
이라는 이름을 가진 로거를 등록하면 해당 클래스의 로거만 기록될 것입니다. 만약 구성 설정에 HR.Salary
라는 이름을 가진 로거를 등록하면 해당 HR.Saraly
네임스페이스에서 로그를 남기는 모든 클래스의 로그가 기록될 것입니다. 또, 구성 설정에 HR
이라는 이름의 로거를 등록하면 HR
네임스페이스에서 로그를 남기는 모든 클래스의 로그가 기록될 것입니다. 마지막으로 이러한 로거들을 등록하지 않는다면 대체 로거가 사용되어 로그는 전혀 기록되지 않습니다.
위와 구성 설정을 예로 들면, HR.Salary.SalaryService
클래스는 콘솔에 로그를 남기며, 그 외의 HR.Salary
네임스페이스의 클래스들은 디버거에 로그를 기록하며 그 외의 HR
네임스페이스의 클래스들을 파일에 로그를 기록하게 됩니다.
이와 같이, 어플리케이션 코드는 GetLogger<T>
메서드를 호출하여 로거를 획득하려 하고 구성 설정에서 네임스페이스와 유사한 로거 이름을 등록함으로써 로그를 기록하는 영역을 제어할 수 있습니다.
로거 이름 레벨링에 대한 구체적인 예제는 LoggerNameLevelSample 예제 코드를 참조 하십시요.