« Back to Index

Simple Log Example with Configuration Overrides

View original Gist on GitHub

Tags: #go #logs

Simple Log Example with Configuration Overrides.go

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)
}