50 lines
856 B
Go
50 lines
856 B
Go
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
|
|
}
|