fccontext/fc_logger.go (57 lines of code) (raw):
package fccontext
import (
"fmt"
"log"
"time"
)
type logWriter struct {
requestID string
level string
}
func (writer logWriter) Write(bytes []byte) (int, error) {
return fmt.Print(time.Now().UTC().Format("2006-01-02T15:04:05.999Z") + " " + writer.requestID + " [" + writer.level + "] " + string(bytes))
}
func newLogWriter(requestID, level string) *logWriter {
return &logWriter{
requestID: requestID,
level: level,
}
}
// FcLogger ...
type FcLogger struct {
debugLogger *log.Logger
infoLogger *log.Logger
warnLogger *log.Logger
errorLogger *log.Logger
}
// NewFcLogger ...
func NewFcLogger(requestID string) *FcLogger {
return &FcLogger{
debugLogger: log.New(newLogWriter(requestID, "DEBUG"), "", log.Lshortfile),
infoLogger: log.New(newLogWriter(requestID, "INFO"), "", log.Lshortfile),
warnLogger: log.New(newLogWriter(requestID, "WARN"), "", log.Lshortfile),
errorLogger: log.New(newLogWriter(requestID, "ERROR"), "", log.Lshortfile),
}
}
// Debug ...
func (l *FcLogger) Debug(v ...interface{}) {
l.debugLogger.Output(2, fmt.Sprintln(v...))
}
// Debugf ...
func (l *FcLogger) Debugf(format string, v ...interface{}) {
l.debugLogger.Output(2, fmt.Sprintf(format, v...))
}
// Info ...
func (l *FcLogger) Info(v ...interface{}) {
l.infoLogger.Output(2, fmt.Sprintln(v...))
}
// Infof ...
func (l *FcLogger) Infof(format string, v ...interface{}) {
l.infoLogger.Output(2, fmt.Sprintf(format, v...))
}
// Warn ...
func (l *FcLogger) Warn(v ...interface{}) {
l.warnLogger.Output(2, fmt.Sprintln(v...))
}
// Warnf ...
func (l *FcLogger) Warnf(format string, v ...interface{}) {
l.warnLogger.Output(2, fmt.Sprintf(format, v...))
}
// Error ...
func (l *FcLogger) Error(v ...interface{}) {
l.errorLogger.Output(2, fmt.Sprintln(v...))
}
// Errorf ...
func (l *FcLogger) Errorf(format string, v ...interface{}) {
l.errorLogger.Output(2, fmt.Sprintf(format, v...))
}