package gopackagebase import ( "fmt" "log" "os" "time" ) type logWriter struct { utcTime bool writeToFile bool logFile *os.File } func (w *logWriter) Write(bytes []byte) (int, error) { t := time.Now() if w.utcTime { t = t.UTC() } format := t.Format(time.RFC3339) return fmt.Fprintf(w.logFile, "%v %v", format, string(bytes)) } func (w *logWriter) Cleanup() { defer w.logFile.Close() } func SetupLogging(writeToFile bool, utcTime bool, logFilename string) (*logWriter, error) { var err error log.SetFlags(0) logFile := os.Stdout if writeToFile { logFile, err = os.OpenFile(logFilename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return nil, err } } writer := &logWriter{ utcTime: utcTime, writeToFile: writeToFile, logFile: logFile, } log.SetOutput(writer) return writer, nil }