close

Create a logger

Pass a message with level = debug and log it

Pass a message with level = info and log it

Pass a message with level = error and log it

Here debug < info < error … level wis

image

AbstractLogger Portion:

   1: public abstract class AbstractLogger
   2: {
   3:    public static int DEBUG = 1;
   4:    public static int INFO = 2;
   5:    public static int ERROR = 3;
   6:    protected int level;
   7:    protected AbstractLogger nextLogger;
   8:    public AbstractLogger(int level)
   9:    {
  10:        this.level = level;
  11:    }
  12:    public abstract void logMessage(int level, String message);
  13:    public void setNextLogger(AbstractLogger nextLogger)
  14:    {
  15:        this.nextLogger = nextLogger;
  16:    }
  17: }

DebugLogger Portion:

   1: public class DebugLogger:AbstractLogger
   2: {
   3:   public DebugLogger(int level) : base(level) { }
   4:  
   5:   public override void logMessage(int level, string message)
   6:   {
   7:       throw new NotImplementedException();
   8:   }
   9: }

InfoLogger Portion:

   1: class InfoLogger : AbstractLogger
   2: {
   3:     public InfoLogger(int level) : base(level) { }
   4:     public override void logMessage(int level, string message)
   5:     {
   6:         throw new NotImplementedException();
   7:     }
   8: }

ErrorLogger Portion:

   1: class ErrorLogger : AbstractLogger
   2: {
   3:     public ErrorLogger(int level) : base(level) { }
   4:     public override void logMessage(int level, string message)
   5:     {
   6:         throw new NotImplementedException();
   7:     }
   8: }

Now we are ready to update each logMessage in DebugLogger, InfoLogger and ErrorLogger.

DebugLogger Portion:

   1: public override void logMessage(int level, string message)
   2: {
   3:     if(this.level == level)
   4:     {
   5:         // handle the request
   6:         Console.WriteLine("DebugLogger.logMessage: {0}", message);
   7:     }
   8:     else
   9:     {
  10:         // pass this to next logger in chain
  11:         nextLogger.logMessage(level, message);
  12:     }
  13: }

InfoLogger Portion:

   1: public override void logMessage(int level, string message)
   2: {
   3:    if(this.level == level)
   4:    {
   5:        // handle the request
   6:        Console.WriteLine("InfoLogger.logMessage: {0}", message);
   7:    }
   8:    else
   9:    {
  10:        // pass this to next logger in chain
  11:        nextLogger.logMessage(level, message);
  12:    }
  13: }

ErrorLogger Portion:

   1: public override void logMessage(int level, string message)
   2: {
   3:     if(this.level == level)
   4:     {
   5:         // handle the request
   6:         Console.WriteLine("ErrorLogger.logMessage: {0}", message);
   7:     }
   8:     else
   9:     {
  10:         // Error 
  11:         Console.WriteLine("level is out of range(Debug=1,Info=2,Error=3): {0}", level);
  12:     }
  13: }

LoggerFactory Portion:

   1: public static AbstractLogger GetLogger()
   2: {
   3:   AbstractLogger debugLogger = new DebugLogger(AbstractLogger.DEBUG);
   4:   AbstractLogger infoLogger = new InfoLogger(AbstractLogger.INFO);
   5:   AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
   6:   debugLogger.setNextLogger(infoLogger);
   7:   infoLogger.setNextLogger(errorLogger);
   8:   return debugLogger;
   9: }

Client Portion:

   1: static void Main(string[] args)
   2: {
   3:    // Create a logger
   4:    AbstractLogger logger = LoggerFactory.GetLogger();
   5:    // Pass a message with level = debug and log it
   6:    logger.logMessage(AbstractLogger.DEBUG, "This is a debug message");
   7:    
   8:    // Pass a message with level = info and log it
   9:    logger.logMessage(AbstractLogger.INFO, "This is a info message");
  10:  
  11:    // Pass a message with level = error and log it
  12:    logger.logMessage(AbstractLogger.ERROR, "This is an error message");
  13:  
  14:    logger.logMessage(AbstractLogger.DEBUG, DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fff "));
  15:    logger.logMessage(AbstractLogger.INFO, DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fff "));
  16:    logger.logMessage(AbstractLogger.ERROR, DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fff "));
  17:    Console.ReadKey();
  18: }

image

 

 

 

References:

1. Design Pattern for beginners - Chain Of Responsibility

全站熱搜
創作者介紹
創作者 me1237guy 的頭像
me1237guy

天天向上

me1237guy 發表在 痞客邦 留言(0) 人氣()