Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import "fmt"
- const (
- ERR = 3
- NOTICE = 5
- DEBUG = 7
- )
- type Logger interface {
- WriteMessage(msg string)
- }
- type ChainLogger struct {
- logger Logger
- next *ChainLogger
- mask int
- }
- func NewChainLogger(mask int, logger Logger) *ChainLogger {
- return &ChainLogger{logger, nil, mask}
- }
- func (self *ChainLogger) SetNext(nextChainLogger *ChainLogger) *ChainLogger {
- if self.next == nil {
- self.next = nextChainLogger
- } else {
- self.next.SetNext(nextChainLogger)
- }
- return self
- }
- func (self *ChainLogger) Message(msg string, priority int) {
- if priority <= self.mask {
- self.logger.WriteMessage(msg)
- if self.next != nil {
- self.next.Message(msg, priority)
- }
- }
- }
- type StdoutLogger struct {
- }
- func (self *StdoutLogger) WriteMessage(msg string) {
- fmt.Println("Writting to stdout: ", msg)
- }
- type EmailLogger struct {
- }
- func (self *EmailLogger) WriteMessage(msg string) {
- fmt.Println("Sending via email :", msg)
- }
- type StderrLogger struct {
- }
- func (self *StderrLogger) WriteMessage(msg string) {
- fmt.Println("Sending to stderr :", msg)
- }
- func main() {
- l := NewChainLogger(DEBUG, &StdoutLogger{}).SetNext(
- NewChainLogger(NOTICE, &EmailLogger{})).SetNext(
- NewChainLogger(ERR, &StderrLogger{}))
- l.Message("Entering function y.", DEBUG)
- l.Message("Step1 Completed.", NOTICE)
- l.Message("Ab error has occurred.", ERR)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement