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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"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
|
type SLogLevel int
|
||||||
|
|
||||||
const (
|
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 {
|
type SLogger struct {
|
||||||
level SLogLevel
|
level SLogLevel
|
||||||
loggers []io.Writer
|
verbose bool
|
||||||
|
formatfct SLogFormatFct
|
||||||
|
timeformat string
|
||||||
|
loggers []io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSLogger() (ret *SLogger) {
|
func NewSLogger() (ret *SLogger) {
|
||||||
ret = &SLogger{}
|
ret = &SLogger{}
|
||||||
ret.level = ERROR
|
ret.level = ERROR
|
||||||
|
ret.verbose = false
|
||||||
|
ret.timeformat = "2006-01-02 15:04:05 MST"
|
||||||
|
ret.formatfct = defaultSLogFormatFct
|
||||||
ret.loggers = []io.Writer{NewStdoutLogger()}
|
ret.loggers = []io.Writer{NewStdoutLogger()}
|
||||||
|
|
||||||
return ret
|
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 {
|
if level > sl.level {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
msg := sl.formatfct(level, sl.verbose, sl.timeformat, format, a...)
|
||||||
|
|
||||||
for _, l := range sl.loggers {
|
for _, l := range sl.loggers {
|
||||||
msg := fmt.Sprintf(format, a...)
|
|
||||||
l.Write([]byte(msg))
|
l.Write([]byte(msg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func LOG_ERROR(format string, a ...interface{}) {
|
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{}) {
|
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{}) {
|
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{}) {
|
func LOG_DEBUG(format string, a ...interface{}) {
|
||||||
DefaultSLog.Log(DEBUG, "[DEBUG] - "+format, a...)
|
defaultSLog.log(DEBUG, format, a...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SET_LEVEL(level SLogLevel) {
|
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) {
|
func ADD_LOGGER(logger io.Writer) {
|
||||||
DefaultSLog.AddLogger(logger)
|
defaultSLog.AddLogger(logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SET_LOGGERS(loggers []io.Writer) {
|
func SET_LOGGERS(loggers []io.Writer) {
|
||||||
DefaultSLog.SetLoggers(loggers)
|
defaultSLog.SetLoggers(loggers)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CLEAR_LOGGERS() {
|
func CLEAR_LOGGERS() {
|
||||||
DefaultSLog.ClearLoggers()
|
defaultSLog.ClearLoggers()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sl *SLogger) SetLevel(level SLogLevel) {
|
func (sl *SLogger) SetLevel(level SLogLevel) {
|
||||||
sl.level = level
|
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) {
|
func (sl *SLogger) AddLogger(logger io.Writer) {
|
||||||
sl.loggers = append(sl.loggers, logger)
|
sl.loggers = append(sl.loggers, logger)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user