Advertisement
Guest User

Untitled

a guest
Dec 11th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. const (
  6. ERR = 3
  7. NOTICE = 5
  8. DEBUG = 7
  9. )
  10.  
  11. type Logger interface {
  12. WriteMessage(msg string)
  13. }
  14.  
  15. type ChainLogger struct {
  16. logger Logger
  17. next *ChainLogger
  18. mask int
  19. }
  20.  
  21. func NewChainLogger(mask int, logger Logger) *ChainLogger {
  22. return &ChainLogger{logger, nil, mask}
  23. }
  24.  
  25. func (self *ChainLogger) SetNext(nextChainLogger *ChainLogger) *ChainLogger {
  26. if self.next == nil {
  27. self.next = nextChainLogger
  28. } else {
  29. self.next.SetNext(nextChainLogger)
  30. }
  31. return self
  32. }
  33.  
  34. func (self *ChainLogger) Message(msg string, priority int) {
  35. if priority <= self.mask {
  36. self.logger.WriteMessage(msg)
  37. if self.next != nil {
  38. self.next.Message(msg, priority)
  39. }
  40. }
  41. }
  42.  
  43. type StdoutLogger struct {
  44. }
  45.  
  46. func (self *StdoutLogger) WriteMessage(msg string) {
  47. fmt.Println("Writting to stdout: ", msg)
  48. }
  49.  
  50. type EmailLogger struct {
  51. }
  52.  
  53. func (self *EmailLogger) WriteMessage(msg string) {
  54. fmt.Println("Sending via email :", msg)
  55. }
  56.  
  57. type StderrLogger struct {
  58. }
  59.  
  60. func (self *StderrLogger) WriteMessage(msg string) {
  61. fmt.Println("Sending to stderr :", msg)
  62. }
  63.  
  64. func main() {
  65. l := NewChainLogger(DEBUG, &StdoutLogger{}).SetNext(
  66. NewChainLogger(NOTICE, &EmailLogger{})).SetNext(
  67. NewChainLogger(ERR, &StderrLogger{}))
  68.  
  69. l.Message("Entering function y.", DEBUG)
  70. l.Message("Step1 Completed.", NOTICE)
  71. l.Message("Ab error has occurred.", ERR)
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement