Files
2026-03-04 16:17:41 +08:00

152 lines
3.7 KiB
Go

package main
import (
"context"
"fmt"
"log"
"os"
"runtime"
"strings"
"github.com/mgutz/ansi"
"github.com/rs/zerolog"
"gopkg.in/natefinch/lumberjack.v2"
)
type LoggerInfo struct {
logger zerolog.Logger
}
type QQLoggerInfo struct {
logger zerolog.Logger
}
var (
logLevel string
)
// Logger instance
var Logger = new(LoggerInfo)
var QQLogger = new(QQLoggerInfo)
// initLogger init logger
func initLogger() {
fileWriter := &lumberjack.Logger{
Filename: "./log/macos.log",
MaxSize: 100,
MaxBackups: 10,
MaxAge: 30,
Compress: false,
}
stdoutWriter := zerolog.ConsoleWriter{
Out: os.Stdout,
TimeFormat: "2006-01-02 15:04:05",
FormatLevel: Logger.ColorFormatLevel,
}
Logger.logger = zerolog.New(zerolog.MultiLevelWriter(fileWriter, stdoutWriter)).With().
Timestamp().
Logger()
QQLogger.logger = Logger.logger
log.SetOutput(Logger.logger)
log.SetFlags(0)
// set log level
switch strings.ToLower(logLevel) {
case "debug":
zerolog.SetGlobalLevel(zerolog.DebugLevel)
case "info":
zerolog.SetGlobalLevel(zerolog.InfoLevel)
case "warn":
zerolog.SetGlobalLevel(zerolog.WarnLevel)
case "error":
zerolog.SetGlobalLevel(zerolog.ErrorLevel)
default:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
}
func getCallerFile() string {
_, filename, line, _ := runtime.Caller(2)
return fmt.Sprintf("%s:%d", filename, line)
}
func DebugCtx(ctx context.Context, msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Debug().Fields(fields).Msg(callerFile + " " + msg)
}
// InfoCtx info log
func InfoCtx(ctx context.Context, msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Info().Fields(fields).Msg(callerFile + " " + msg)
}
// WarnCtx log
func WarnCtx(ctx context.Context, msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Warn().Fields(fields).Msg(callerFile + " " + msg)
}
// ErrorCtx error log
func ErrorCtx(ctx context.Context, msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Error().Fields(fields).Msg(callerFile + " " + msg)
}
// FatalCtx fatal log
func FatalCtx(ctx context.Context, msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Fatal().Fields(fields).Msg(callerFile + " " + msg)
}
func Debug(msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Debug().Fields(fields).Msg(callerFile + " " + msg)
}
// Info info log
func Info(msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Info().Fields(fields).Msg(callerFile + " " + msg)
}
// Warn log
func Warn(msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Warn().Fields(fields).Msg(callerFile + " " + msg)
}
// Error error log
func Error(msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Error().Fields(fields).Msg(callerFile + " " + msg)
}
// Fatal fatal log
func Fatal(msg string, fields ...interface{}) {
callerFile := getCallerFile()
Logger.logger.Fatal().Fields(fields).Msg(callerFile + " " + msg)
}
func (l *LoggerInfo) ColorFormatLevel(i interface{}) string {
level := strings.ToUpper(fmt.Sprintf("%v", i))
switch level {
case "DEBUG":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "cyan")
case "INFO":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "green")
case "WARN":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "yellow")
case "ERROR":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "red")
case "FATAL":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "magenta")
case "PANIC":
return ansi.Color(fmt.Sprintf("| %-5s |", level), "magenta+bh")
default:
return ansi.Color(fmt.Sprintf("| %-5s |", "STD"), "white")
}
}