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