Tags: #go #logs
package main
import (
"fmt"
"log"
"os"
)
type LogOption func(*Log)
type Log struct {
logger *log.Logger
rate int
}
func NewLog(logger *log.Logger, opts ...LogOption) *Log {
l := &Log{
logger: logger,
rate: 100,
}
for _, opt := range opts {
opt(l)
}
return l
}
func ModifyLoggerConfiguration(l *Log) {
l.rate = 20
}
func main() {
logger := log.New(os.Stdout, "SOME_PREFIX: ", log.Ldate|log.Ltime|log.Lshortfile)
l := NewLog(logger)
fmt.Printf("l = %+v\n\n", l)
l.logger.Print("foo") // SOME_PREFIX: 2009/11/10 23:00:00 prog.go:33: foo
l.logger.Print("bar") // SOME_PREFIX: 2009/11/10 23:00:00 prog.go:34: bar
l.logger.Print("baz") // SOME_PREFIX: 2009/11/10 23:00:00 prog.go:35: baz
l2 := NewLog(logger, ModifyLoggerConfiguration)
fmt.Printf("\nl = %+v\n\n", l2)
}