[c#] 데코레이터를 이용한 로깅 레벨 동적 변경
데코레이터를 이용하면 C# 언어에서 로깅 레벨을 동적으로 변경할 수 있습니다. 로깅 레벨을 런타임 중에 변경하면 특정 시나리오에 따라 로그를 상세히 기록하거나 간결하게 기록할 수 있습니다.
데코레이터 패턴
데코레이터 패턴은 객체에 추가적인 기능을 동적으로 첨가하는 디자인 패턴입니다. 기존 객체를 수정하지 않고 새로운 기능을 런타임에 추가할 수 있어 유연한 구조를 제공합니다.
로깅 레벨 동적 변경 구현
public abstract class LoggerDecorator : ILogger
{
protected ILogger _logger;
public LoggerDecorator(ILogger logger)
{
_logger = logger;
}
public virtual void Log(string message)
{
_logger.Log(message);
}
}
public class LogLevelDecorator : LoggerDecorator
{
private LogLevel _logLevel;
public LogLevelDecorator(ILogger logger, LogLevel logLevel) : base(logger)
{
_logLevel = logLevel;
}
public override void Log(string message)
{
if (_logger is ILogLevelLogger levelLogger)
{
levelLogger.LogWithLevel(_logLevel, message);
}
else
{
_logger.Log(message);
}
}
}
위의 예시는 로깅 레벨을 동적으로 변경하기 위한 데코레이터 구현 예시입니다. LogLevelDecorator
는 ILogger
를 상속하는 데코레이터 클래스이며, Log
메서드를 오버라이드하여 로깅 레벨에 따라 다른 동작을 하도록 구현되어 있습니다.
사용 예시
ILogger logger = new LogLevelDecorator(new ConsoleLogger(), LogLevel.Debug);
logger.Log("Debug message"); // Debug 로그 출력
((LogLevelDecorator)logger).LogLevel = LogLevel.Info;
logger.Log("Info message"); // Info 로그 출력
위의 예시는 런타임 중에 LogLevelDecorator
의 LogLevel
속성을 변경하여 로깅 레벨을 동적으로 변경하는 방법을 보여줍니다.
로깅 레벨을 동적으로 변경하는 데코레이터 패턴은 유연한 로깅 시스템을 구축하는 데 유용하며, 특히 다양한 환경에서 로깅 레벨을 다르게 설정해야 하는 경우에 유용합니다.
결론
데코레이터 패턴을 사용하여 C# 애플리케이션에서 로깅 레벨을 동적으로 변경하는 방법에 대해 살펴보았습니다. 이를 통해 로깅 시스템을 유연하게 구성하고 특정 시나리오에 따라 로그를 상세히 기록하거나 간결하게 기록할 수 있습니다.
참고 문헌:
- Microsoft Docs - Decorator pattern
- Refactoring Guru - Decorator Pattern
- C# Design Patterns: A Tutorial - Decorator Pattern