Files
TaskPool/internal/logger/logger.go
T
2025-12-27 12:42:43 +08:00

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