blob: 62ded835ef55090df1742031f29b766ccf7781e4 [file] [log] [blame]
package logging
import (
"fmt"
"log"
"os"
)
// Level represents the level of logging.
type LogLevel uint8
const (
Debug LogLevel = iota
Info
Warn
Error
Fatal
Panic
)
type ILogger interface {
Debug(v ...interface{})
Debugf(format string, v ...interface{})
Info(v ...interface{})
Infof(format string, v ...interface{})
Warn(v ...interface{})
Warnf(format string, v ...interface{})
Error(v ...interface{})
Errorf(format string, v ...interface{})
Fatal(v ...interface{})
Fatalf(format string, v ...interface{})
Panic(v ...interface{})
Panicf(format string, v ...interface{})
}
const (
DefaultLogLevel = Info
DefaultNamespace = "default"
)
type SeataLogger struct {
loggers []*log.Logger
namespace string
logLevel LogLevel
}
var Logger *SeataLogger
func init() {
var loggers = make([]*log.Logger, 0)
loggers = append(loggers, log.New(os.Stdout, "", log.LstdFlags))
Logger = &SeataLogger{
loggers: loggers,
namespace: DefaultNamespace,
logLevel: DefaultLogLevel,
}
}
func merge(namespace, logLevel, msg string) string {
return fmt.Sprintf("%s %s %s", namespace, logLevel, msg)
}
func SetNamespace(namespace string) {
Logger.namespace = namespace
}
func SetLogLevel(logLevel LogLevel) {
Logger.logLevel = logLevel
}
func AddLogger(logger *log.Logger) {
Logger.loggers = append(Logger.loggers, logger)
}
func (l *SeataLogger) Debug(v ...interface{}) {
if Debug < l.logLevel || len(v) == 0 {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "DEBUG", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Debugf(format string, v ...interface{}) {
if Debug < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "DEBUG", fmt.Sprintf(format, v...)))
}
}
func (l *SeataLogger) Info(v ...interface{}) {
if Info < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "INFO", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Infof(format string, v ...interface{}) {
if Info < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "INFO", fmt.Sprintf(format, v...)))
}
}
func (l *SeataLogger) Warn(v ...interface{}) {
if Warn < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "WARNING", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Warnf(format string, v ...interface{}) {
if Warn < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "WARNING", fmt.Sprintf(format, v...)))
}
}
func (l *SeataLogger) Error(v ...interface{}) {
if Error < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "ERROR", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Errorf(format string, v ...interface{}) {
if Error < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "ERROR", fmt.Sprintf(format, v...)))
}
}
func (l *SeataLogger) Fatal(v ...interface{}) {
if Fatal < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "FATAL", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Fatalf(format string, v ...interface{}) {
if Fatal < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "FATAL", fmt.Sprintf(format, v...)))
}
}
func (l *SeataLogger) Panic(v ...interface{}) {
if Panic < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "PANIC", fmt.Sprint(v...)))
}
}
func (l *SeataLogger) Panicf(format string, v ...interface{}) {
if Panic < l.logLevel {
return
}
for _,log := range l.loggers {
log.Print(merge(l.namespace, "PANIC", fmt.Sprintf(format, v...)))
}
}