mirror of
https://github.com/yincongcyincong/wechat_chatter.git
synced 2026-07-15 10:26:52 +08:00
152 lines
3.7 KiB
Go
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")
|
|
}
|
|
}
|