86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
type Logger struct {
|
|
*log.Logger
|
|
name string
|
|
file string
|
|
}
|
|
|
|
// DEBUG/WARNING will only be written to file
|
|
// INFO/ERROR will be written to file and printed to stdout/stderr
|
|
const (
|
|
DEBUG = iota
|
|
INFO
|
|
WARNING
|
|
ERROR
|
|
)
|
|
|
|
var levels = map[int]string{
|
|
DEBUG: "[DEBUG]",
|
|
INFO: "[INFO]",
|
|
WARNING: "[WARNING]",
|
|
ERROR: "[ERROR]",
|
|
}
|
|
|
|
var outLogger = log.New(os.Stdout, "", log.LstdFlags)
|
|
var errLogger = log.New(os.Stderr, "", log.LstdFlags)
|
|
|
|
func OutLogger() *log.Logger {
|
|
return outLogger
|
|
}
|
|
|
|
func ErrLogger() *log.Logger {
|
|
return errLogger
|
|
}
|
|
|
|
func NewLogger(name, file string) *Logger {
|
|
logger := Logger{
|
|
Logger: log.New(os.Stderr, "", log.LstdFlags),
|
|
name: name,
|
|
file: file,
|
|
}
|
|
return &logger
|
|
}
|
|
|
|
func (logger *Logger) Log(level int, v ...interface{}) {
|
|
if level == INFO {
|
|
outLogger.Println(append([]interface{}{"[" + logger.name + "]"}, v...))
|
|
} else if level == ERROR {
|
|
errLogger.Println(append([]interface{}{"[" + logger.name + "]"}, v...))
|
|
}
|
|
|
|
f, err := os.OpenFile(logger.file, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
|
|
if err != nil {
|
|
errLogger.Println(err.Error())
|
|
}
|
|
defer f.Close()
|
|
|
|
levelStr := levels[level]
|
|
args := []interface{}{levelStr + ":"}
|
|
args = append(args, v...)
|
|
|
|
logger.SetOutput(f)
|
|
logger.Println(v...)
|
|
}
|
|
|
|
func (logger *Logger) Debug(v ...interface{}) {
|
|
logger.Log(DEBUG, v...)
|
|
}
|
|
|
|
func (logger *Logger) Info(v ...interface{}) {
|
|
logger.Log(INFO, v...)
|
|
}
|
|
|
|
func (logger *Logger) Warning(v ...interface{}) {
|
|
logger.Log(WARNING, v...)
|
|
}
|
|
|
|
func (logger *Logger) Error(v ...interface{}) {
|
|
logger.Log(ERROR, v...)
|
|
}
|