123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package logger
- import (
- "fmt"
- "os"
- "time"
- "github.com/op/go-logging"
- )
- var (
- logger *logging.Logger
- logBuffer []struct {
- time string
- level logging.Level
- log string
- }
- )
- func init() {
- InitLogger(logging.INFO)
- }
- func InitLogger(level logging.Level) {
- newLogger := logging.MustGetLogger("x-ui")
- var err error
- var backend logging.Backend
- var format logging.Formatter
- ppid := os.Getppid()
- backend, err = logging.NewSyslogBackend("")
- if err != nil {
- println(err)
- backend = logging.NewLogBackend(os.Stderr, "", 0)
- }
- if ppid > 0 && err != nil {
- format = logging.MustStringFormatter(`%{time:2006/01/02 15:04:05} %{level} - %{message}`)
- } else {
- format = logging.MustStringFormatter(`%{level} - %{message}`)
- }
- backendFormatter := logging.NewBackendFormatter(backend, format)
- backendLeveled := logging.AddModuleLevel(backendFormatter)
- backendLeveled.SetLevel(level, "x-ui")
- newLogger.SetBackend(backendLeveled)
- logger = newLogger
- }
- func Debug(args ...interface{}) {
- logger.Debug(args...)
- addToBuffer("DEBUG", fmt.Sprint(args...))
- }
- func Debugf(format string, args ...interface{}) {
- logger.Debugf(format, args...)
- addToBuffer("DEBUG", fmt.Sprintf(format, args...))
- }
- func Info(args ...interface{}) {
- logger.Info(args...)
- addToBuffer("INFO", fmt.Sprint(args...))
- }
- func Infof(format string, args ...interface{}) {
- logger.Infof(format, args...)
- addToBuffer("INFO", fmt.Sprintf(format, args...))
- }
- func Notice(args ...interface{}) {
- logger.Notice(args...)
- addToBuffer("NOTICE", fmt.Sprint(args...))
- }
- func Noticef(format string, args ...interface{}) {
- logger.Noticef(format, args...)
- addToBuffer("NOTICE", fmt.Sprintf(format, args...))
- }
- func Warning(args ...interface{}) {
- logger.Warning(args...)
- addToBuffer("WARNING", fmt.Sprint(args...))
- }
- func Warningf(format string, args ...interface{}) {
- logger.Warningf(format, args...)
- addToBuffer("WARNING", fmt.Sprintf(format, args...))
- }
- func Error(args ...interface{}) {
- logger.Error(args...)
- addToBuffer("ERROR", fmt.Sprint(args...))
- }
- func Errorf(format string, args ...interface{}) {
- logger.Errorf(format, args...)
- addToBuffer("ERROR", fmt.Sprintf(format, args...))
- }
- func addToBuffer(level string, newLog string) {
- t := time.Now()
- if len(logBuffer) >= 10240 {
- logBuffer = logBuffer[1:]
- }
- logLevel, _ := logging.LogLevel(level)
- logBuffer = append(logBuffer, struct {
- time string
- level logging.Level
- log string
- }{
- time: t.Format("2006/01/02 15:04:05"),
- level: logLevel,
- log: newLog,
- })
- }
- func GetLogs(c int, level string) []string {
- var output []string
- logLevel, _ := logging.LogLevel(level)
- for i := len(logBuffer) - 1; i >= 0 && len(output) <= c; i-- {
- if logBuffer[i].level <= logLevel {
- output = append(output, fmt.Sprintf("%s %s - %s", logBuffer[i].time, logBuffer[i].level, logBuffer[i].log))
- }
- }
- return output
- }
|