Added timeformat, verbose and overriding of log format function
This commit is contained in:
parent
51d4700637
commit
432e918a9a
91
slog.go
91
slog.go
|
@ -3,8 +3,28 @@ package slog
|
|||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
type SLogFormatFct func(level SLogLevel, verbose bool, timeformat string, format string, a ...interface{}) string
|
||||
|
||||
func defaultSLogFormatFct(level SLogLevel, verbose bool, timeformat string, format string, a ...interface{}) string {
|
||||
msg := fmt.Sprintf("[%s] - ", SLogLevelToString(level))
|
||||
if timeformat != "" {
|
||||
t := time.Now()
|
||||
msg = fmt.Sprintf("%s - %s", t.Format(timeformat), msg)
|
||||
}
|
||||
if verbose {
|
||||
if fct, file, line, ok := runtime.Caller(3); ok {
|
||||
msg = msg + fmt.Sprintf("{File: %s, Line: %d, Function: %s} - ", file, line, runtime.FuncForPC(fct).Name())
|
||||
}
|
||||
}
|
||||
|
||||
msg = fmt.Sprintf(msg+format, a...)
|
||||
return msg
|
||||
}
|
||||
|
||||
type SLogLevel int
|
||||
|
||||
const (
|
||||
|
@ -29,68 +49,113 @@ func GetSLogLevel(level string) SLogLevel {
|
|||
}
|
||||
}
|
||||
|
||||
func SLogLevelToString(level SLogLevel) string {
|
||||
switch level {
|
||||
case ERROR:
|
||||
return "ERROR"
|
||||
case WARN:
|
||||
return "WARN"
|
||||
case INFO:
|
||||
return "INFO"
|
||||
case DEBUG:
|
||||
return "DEBUG"
|
||||
default:
|
||||
return "ERROR"
|
||||
}
|
||||
}
|
||||
|
||||
type SLogger struct {
|
||||
level SLogLevel
|
||||
loggers []io.Writer
|
||||
level SLogLevel
|
||||
verbose bool
|
||||
formatfct SLogFormatFct
|
||||
timeformat string
|
||||
loggers []io.Writer
|
||||
}
|
||||
|
||||
func NewSLogger() (ret *SLogger) {
|
||||
ret = &SLogger{}
|
||||
ret.level = ERROR
|
||||
ret.verbose = false
|
||||
ret.timeformat = "2006-01-02 15:04:05 MST"
|
||||
ret.formatfct = defaultSLogFormatFct
|
||||
ret.loggers = []io.Writer{NewStdoutLogger()}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
var DefaultSLog = NewSLogger()
|
||||
var defaultSLog = NewSLogger()
|
||||
|
||||
func (sl *SLogger) Log(level SLogLevel, format string, a ...interface{}) {
|
||||
func (sl *SLogger) log(level SLogLevel, format string, a ...interface{}) {
|
||||
if level > sl.level {
|
||||
return
|
||||
}
|
||||
msg := sl.formatfct(level, sl.verbose, sl.timeformat, format, a...)
|
||||
|
||||
for _, l := range sl.loggers {
|
||||
msg := fmt.Sprintf(format, a...)
|
||||
l.Write([]byte(msg))
|
||||
}
|
||||
}
|
||||
|
||||
func LOG_ERROR(format string, a ...interface{}) {
|
||||
DefaultSLog.Log(ERROR, "[ERROR] - "+format, a...)
|
||||
defaultSLog.log(ERROR, format, a...)
|
||||
}
|
||||
|
||||
func LOG_WARN(format string, a ...interface{}) {
|
||||
DefaultSLog.Log(WARN, "[WARN] - "+format, a...)
|
||||
defaultSLog.log(WARN, format, a...)
|
||||
}
|
||||
|
||||
func LOG_INFO(format string, a ...interface{}) {
|
||||
DefaultSLog.Log(INFO, "[INFO] - "+format, a...)
|
||||
defaultSLog.log(INFO, format, a...)
|
||||
}
|
||||
|
||||
func LOG_DEBUG(format string, a ...interface{}) {
|
||||
DefaultSLog.Log(DEBUG, "[DEBUG] - "+format, a...)
|
||||
defaultSLog.log(DEBUG, format, a...)
|
||||
}
|
||||
|
||||
func SET_LEVEL(level SLogLevel) {
|
||||
DefaultSLog.SetLevel(level)
|
||||
defaultSLog.SetLevel(level)
|
||||
}
|
||||
|
||||
func SET_FORMAT(fct SLogFormatFct) {
|
||||
defaultSLog.SetFormat(fct)
|
||||
}
|
||||
|
||||
func SET_VERBOSE(verbose bool) {
|
||||
defaultSLog.SetVerbose(verbose)
|
||||
}
|
||||
|
||||
func SET_TIMEFORMAT(timeformat string) {
|
||||
defaultSLog.SetTimeFormat(timeformat)
|
||||
}
|
||||
|
||||
func ADD_LOGGER(logger io.Writer) {
|
||||
DefaultSLog.AddLogger(logger)
|
||||
defaultSLog.AddLogger(logger)
|
||||
}
|
||||
|
||||
func SET_LOGGERS(loggers []io.Writer) {
|
||||
DefaultSLog.SetLoggers(loggers)
|
||||
defaultSLog.SetLoggers(loggers)
|
||||
}
|
||||
|
||||
func CLEAR_LOGGERS() {
|
||||
DefaultSLog.ClearLoggers()
|
||||
defaultSLog.ClearLoggers()
|
||||
}
|
||||
|
||||
func (sl *SLogger) SetLevel(level SLogLevel) {
|
||||
sl.level = level
|
||||
}
|
||||
|
||||
func (sl *SLogger) SetVerbose(verbose bool) {
|
||||
sl.verbose = verbose
|
||||
}
|
||||
|
||||
func (sl *SLogger) SetFormat(fct SLogFormatFct) {
|
||||
sl.formatfct = fct
|
||||
}
|
||||
|
||||
func (sl *SLogger) SetTimeFormat(format string) {
|
||||
sl.timeformat = format
|
||||
}
|
||||
|
||||
func (sl *SLogger) AddLogger(logger io.Writer) {
|
||||
sl.loggers = append(sl.loggers, logger)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue