package main import ( "fmt" "log" "os" ) type Logger struct { infoLog *log.Logger warnLog *log.Logger errorLog *log.Logger } func NewLogger() *Logger { return &Logger{ infoLog: log.New(os.Stdout, "INFO ", log.Ldate|log.Ltime|log.Lshortfile), warnLog: log.New(os.Stdout, "WARN ", log.Ldate|log.Ltime|log.Lshortfile), errorLog: log.New(os.Stderr, "ERROR ", log.Ldate|log.Ltime|log.Lshortfile), } } func (l *Logger) Info(format string, v ...interface{}) { l.infoLog.Output(2, fmt.Sprintf(format, v...)) } func (l *Logger) Warn(format string, v ...interface{}) { l.warnLog.Output(2, fmt.Sprintf(format, v...)) } func (l *Logger) Error(format string, v ...interface{}) { l.errorLog.Output(2, fmt.Sprintf(format, v...)) }