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
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: }
References:
1. Design Pattern for beginners - Chain Of Responsibility
全站熱搜


留言列表
