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
全站熱搜