diff --git a/pkg/aspirador.go b/pkg/aspirador.go new file mode 100644 index 0000000..a8e1a1c --- /dev/null +++ b/pkg/aspirador.go @@ -0,0 +1,51 @@ +package pkg + +import ( + "log" +) + +const ( + defaultLoggerFlag = log.Ldate | log.Ltime | log.Lshortfile | log.Lmicroseconds +) + +type Aspirador struct { + clients []Client +} + +// Default to Console. +func NewAspirador() Aspirador { + clients := make([]Client, 1) + clients[0] = NewConsoleClient() + + return Aspirador{ + clients: clients, + } +} + +func (as Aspirador) Trace(msg string) { + as.log(TRACE, msg) +} + +func (as Aspirador) Info(msg string) { + as.log(INFO, msg) +} + +func (as Aspirador) Warning(msg string) { + as.log(WARNING, msg) +} + +func (as Aspirador) Error(msg string) { + as.log(ERROR, msg) +} + +func (as Aspirador) log(lvl Level, msg string) { + record := Record{ + Level: lvl, + Message: msg, + } + + for _, v := range as.clients { + v.Write(record) + } + +} diff --git a/pkg/client.go b/pkg/client.go new file mode 100644 index 0000000..6c11c00 --- /dev/null +++ b/pkg/client.go @@ -0,0 +1,5 @@ +package pkg + +type Client interface { + Write(ar Record) +} diff --git a/pkg/consoleclient.go b/pkg/consoleclient.go new file mode 100644 index 0000000..e3b1000 --- /dev/null +++ b/pkg/consoleclient.go @@ -0,0 +1,26 @@ +package pkg + +import ( + "log" + "os" +) + +type ConsoleClient struct { + loggers []*log.Logger +} + +func NewConsoleClient() ConsoleClient { + loggers := make([]*log.Logger, len(levelPrefix)) + + for i, v := range levelPrefix { + loggers[i] = log.New(os.Stdout, v, defaultLoggerFlag) + } + + return ConsoleClient{ + loggers: loggers, + } +} + +func (cc ConsoleClient) Write(ar Record) { + cc.loggers[ar.Level].Println(ar.Message) +} diff --git a/pkg/level.go b/pkg/level.go new file mode 100644 index 0000000..3bca24b --- /dev/null +++ b/pkg/level.go @@ -0,0 +1,22 @@ +package pkg + +const ( + TRACE Level = iota + INFO + WARNING + ERROR +) + +var ( + levelPrefix = []string{"TRACE: ", "INFO: ", "WARNING: ", "ERROR: "} +) + +type Level int + +func (l Level) String() string { + if l < 0 || int(l) > len(levelPrefix) { + l = 0 + } + + return levelPrefix[int(l)] +} diff --git a/pkg/record.go b/pkg/record.go new file mode 100644 index 0000000..01672bb --- /dev/null +++ b/pkg/record.go @@ -0,0 +1,6 @@ +package pkg + +type Record struct { + Message string + Level Level +}