slog/slog.go

90 lines
1.5 KiB
Go

package slog
import (
"fmt"
"io"
)
type SLogLevel int
const (
ERROR SLogLevel = iota
WARN
INFO
DEBUG
)
type SLogger struct {
level SLogLevel
loggers []io.Writer
}
func NewSLogger() (ret *SLogger) {
ret = &SLogger{}
ret.level = ERROR
ret.loggers = []io.Writer{NewStdoutLogger()}
return ret
}
var DefaultSLog = NewSLogger()
func (sl *SLogger) Log(level SLogLevel, format string, a ...interface{}) {
if level > sl.level {
return
}
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...)
}
func LOG_WARN(format string, a ...interface{}) {
DefaultSLog.Log(WARN, "[WARN] - "+format, a...)
}
func LOG_INFO(format string, a ...interface{}) {
DefaultSLog.Log(INFO, "[INFO] - "+format, a...)
}
func LOG_DEBUG(format string, a ...interface{}) {
DefaultSLog.Log(DEBUG, "[DEBUG] - "+format, a...)
}
func SET_LEVEL(level SLogLevel) {
DefaultSLog.SetLevel(level)
}
func ADD_LOGGER(logger io.Writer) {
DefaultSLog.AddLogger(logger)
}
func SET_LOGGERS(loggers []io.Writer) {
DefaultSLog.SetLoggers(loggers)
}
func CLEAR_LOGGERS() {
DefaultSLog.ClearLoggers()
}
func (sl *SLogger) SetLevel(level SLogLevel) {
sl.level = level
}
func (sl *SLogger) AddLogger(logger io.Writer) {
sl.loggers = append(sl.loggers, logger)
}
func (sl *SLogger) SetLoggers(loggers []io.Writer) {
sl.loggers = loggers
}
func (sl *SLogger) ClearLoggers() {
sl.loggers = []io.Writer{}
}