117 lines
3.0 KiB
Go
117 lines
3.0 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var Log *logrus.Logger
|
|
|
|
// CustomFormatter 自定义日志格式
|
|
type CustomFormatter struct{}
|
|
|
|
// ANSI 颜色代码 (参考 logrus 默认配色)
|
|
const (
|
|
colorReset = "\033[0m"
|
|
colorRed = "\033[31m" // error, fatal, panic
|
|
colorYellow = "\033[33m" // warn
|
|
colorBlue = "\033[36m" // info (logrus 默认用 cyan)
|
|
colorGray = "\033[37m" // debug (logrus 默认用 white)
|
|
)
|
|
|
|
func (f *CustomFormatter) Format(entry *logrus.Entry) ([]byte, error) {
|
|
timestamp := entry.Time.Format("2006-01-02 15:04:05")
|
|
level := strings.ToUpper(entry.Level.String())
|
|
|
|
// 根据日志级别设置颜色 (参考 logrus TextFormatter 默认配色)
|
|
var levelColor string
|
|
switch entry.Level {
|
|
case logrus.DebugLevel, logrus.TraceLevel:
|
|
levelColor = colorGray
|
|
case logrus.InfoLevel:
|
|
levelColor = colorBlue
|
|
case logrus.WarnLevel:
|
|
levelColor = colorYellow
|
|
case logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel:
|
|
levelColor = colorRed
|
|
default:
|
|
levelColor = colorBlue
|
|
}
|
|
|
|
msg := fmt.Sprintf("[%s]%s[%s]%s %s\n", timestamp, levelColor, level, colorReset, entry.Message)
|
|
return []byte(msg), nil
|
|
}
|
|
|
|
func init() {
|
|
Log = logrus.New()
|
|
|
|
// 设置自定义日志格式
|
|
Log.SetFormatter(&CustomFormatter{})
|
|
|
|
// 设置日志级别
|
|
Log.SetLevel(logrus.InfoLevel)
|
|
|
|
// 输出到标准输出
|
|
Log.SetOutput(os.Stdout)
|
|
}
|
|
|
|
// SetupFileOutput 设置文件输出
|
|
func SetupFileOutput(logDir string) error {
|
|
if err := os.MkdirAll(logDir, 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
logFile := filepath.Join(logDir, time.Now().Format("2006-01-02")+".log")
|
|
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
Log.SetOutput(file)
|
|
return nil
|
|
}
|
|
|
|
// SetLevel 设置日志级别
|
|
func SetLevel(level string) {
|
|
switch level {
|
|
case "debug":
|
|
Log.SetLevel(logrus.DebugLevel)
|
|
case "info":
|
|
Log.SetLevel(logrus.InfoLevel)
|
|
case "warn":
|
|
Log.SetLevel(logrus.WarnLevel)
|
|
case "error":
|
|
Log.SetLevel(logrus.ErrorLevel)
|
|
default:
|
|
Log.SetLevel(logrus.InfoLevel)
|
|
}
|
|
}
|
|
|
|
// 便捷方法
|
|
func Debug(args ...interface{}) { Log.Debug(args...) }
|
|
func Info(args ...interface{}) { Log.Info(args...) }
|
|
func Warn(args ...interface{}) { Log.Warn(args...) }
|
|
func Error(args ...interface{}) { Log.Error(args...) }
|
|
func Fatal(args ...interface{}) { Log.Fatal(args...) }
|
|
|
|
func Debugf(format string, args ...interface{}) { Log.Debugf(format, args...) }
|
|
func Infof(format string, args ...interface{}) { Log.Infof(format, args...) }
|
|
func Warnf(format string, args ...interface{}) { Log.Warnf(format, args...) }
|
|
func Errorf(format string, args ...interface{}) { Log.Errorf(format, args...) }
|
|
func Fatalf(format string, args ...interface{}) { Log.Fatalf(format, args...) }
|
|
|
|
// WithField 带字段的日志
|
|
func WithField(key string, value interface{}) *logrus.Entry {
|
|
return Log.WithField(key, value)
|
|
}
|
|
|
|
// WithFields 带多个字段的日志
|
|
func WithFields(fields logrus.Fields) *logrus.Entry {
|
|
return Log.WithFields(fields)
|
|
}
|