[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);
        }
    }
}

위의 예시는 로깅 레벨을 동적으로 변경하기 위한 데코레이터 구현 예시입니다. LogLevelDecoratorILogger를 상속하는 데코레이터 클래스이며, Log 메서드를 오버라이드하여 로깅 레벨에 따라 다른 동작을 하도록 구현되어 있습니다.

사용 예시

ILogger logger = new LogLevelDecorator(new ConsoleLogger(), LogLevel.Debug);
logger.Log("Debug message"); // Debug 로그 출력

((LogLevelDecorator)logger).LogLevel = LogLevel.Info;
logger.Log("Info message"); // Info 로그 출력

위의 예시는 런타임 중에 LogLevelDecoratorLogLevel 속성을 변경하여 로깅 레벨을 동적으로 변경하는 방법을 보여줍니다.

로깅 레벨을 동적으로 변경하는 데코레이터 패턴은 유연한 로깅 시스템을 구축하는 데 유용하며, 특히 다양한 환경에서 로깅 레벨을 다르게 설정해야 하는 경우에 유용합니다.

결론

데코레이터 패턴을 사용하여 C# 애플리케이션에서 로깅 레벨을 동적으로 변경하는 방법에 대해 살펴보았습니다. 이를 통해 로깅 시스템을 유연하게 구성하고 특정 시나리오에 따라 로그를 상세히 기록하거나 간결하게 기록할 수 있습니다.

참고 문헌: