[c#] 데코레이터를 이용한 로깅 수준 조절

C#의 데코레이터 패턴을 활용하면 코드의 수정 없이도 로깅 수준을 동적으로 조절할 수 있습니다. 이 패턴은 기존 객체에 새로운 기능을 추가하기 위해 사용되며, 객체를 감싸는 래퍼 클래스를 생성하여 작동합니다.

아래는 데코레이터를 이용한 로깅 수준 조절의 예제 코드입니다.

먼저, ILogger 인터페이스를 정의합니다.

public interface ILogger
{
    void Log(string message);
}

다음으로, 기본 로거 클래스를 구현합니다.

public class BasicLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine($"[INFO] {message}");
    }
}

그런 다음, 로깅 수준을 동적으로 조절하기 위한 데코레이터 클래스를 작성합니다.

public class LogLevelDecorator : ILogger
{
    private readonly ILogger _logger;
    private readonly LogLevel _logLevel;

    public LogLevelDecorator(ILogger logger, LogLevel logLevel)
    {
        _logger = logger;
        _logLevel = logLevel;
    }

    public void Log(string message)
    {
        if (_logLevel == LogLevel.Debug)
        {
            Console.WriteLine($"[DEBUG] {message}");
        }
        else
        {
            _logger.Log(message);
        }
    }
}

public enum LogLevel
{
    Debug,
    Info
}

이제, 데코레이터 클래스를 사용하여 로깅 수준을 동적으로 조절할 수 있습니다.

ILogger logger = new LogLevelDecorator(new BasicLogger(), LogLevel.Debug);
logger.Log("This is a debug message.");
logger.Log("This is an info message.");

위의 예제에서는 LogLevelDecorator 클래스를 사용하여 기본 로깅 시스템에 로깅 수준을 추가했습니다. 따라서 “This is a debug message.”는 DEBUG 수준으로, “This is an info message.”는 INFO 수준으로 출력됩니다.

이를 통해 데코레이터를 이용하여 로깅 수준을 동적으로 조절하는 방법에 대해 알아보았습니다. 데코레이터 패턴을 활용하면 코드의 수정 없이도 로깅 시스템을 유연하게 확장할 수 있습니다.