Added timeformat, verbose and overriding of log format function

This commit is contained in:
Matthias Fulz 2020-07-06 00:28:54 +02:00
parent 51d4700637
commit 432e918a9a
1 changed files with 78 additions and 13 deletions

91
slog.go
View File

@ -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)
}