123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- package logger
- import (
- // "path"
- "fmt"
- "net/http"
- "runtime"
- "strconv"
- "strings"
- "time"
- // "time"
- "github.com/gin-gonic/gin"
- rotatelogs "github.com/lestrrat-go/file-rotatelogs"
- "github.com/rifflock/lfshook"
- "github.com/sirupsen/logrus"
- )
- const filename = "./logs/console"
- func init() {
- logrus.SetFormatter(&DFormatter{})
- writer, _ := rotatelogs.New(
- filename+".%Y%m%d.log",
- // rotatelogs.WithLinkName(filename),
- rotatelogs.WithRotationCount(50),
- rotatelogs.WithRotationTime(time.Hour*24),
- )
- logrus.AddHook(lfshook.NewHook(
- lfshook.WriterMap{
- logrus.DebugLevel: writer,
- logrus.InfoLevel: writer,
- logrus.WarnLevel: writer,
- logrus.ErrorLevel: writer,
- logrus.FatalLevel: writer,
- logrus.PanicLevel: writer,
- }, &logrus.TextFormatter{}),
- )
- // logrus.SetOutput(writer)
- // logrus.SetLevel(logrus.InfoLevel)
- }
- type DFormatter struct {
- TimestampFormat string
- }
- func (f *DFormatter) Format(entry *logrus.Entry) ([]byte, error) {
- timestampFormat := f.TimestampFormat
- if timestampFormat == "" {
- timestampFormat = "2006/01/02 15:04:05"
- }
- _, file, line, ok := runtime.Caller(9)
- if !ok {
- file = "???"
- line = 0
- }
- // _, filename := path.Split(file)
- msg := entry.Time.Format(timestampFormat) +
- " " + strings.ToUpper(entry.Level.String()) +
- " [" + file + ":" + strconv.Itoa(line) + "] " +
- entry.Message + "\n"
- return []byte(msg), nil
- }
- func Debugf(format string, args ...interface{}) {
- logrus.Debugf(format, args...)
- }
- func LogErr(err error, format string, args ...interface{}) bool {
- if err != nil {
- args = append(args, err.Error())
- logrus.Infof(format+" %s", args...)
- return false
- }
- return true
- }
- func Infof(format string, args ...interface{}) {
- logrus.Infof(format, args...)
- }
- func Warnf(format string, args ...interface{}) {
- logrus.Warnf(format, args...)
- }
- func Errorf(format string, args ...interface{}) {
- logrus.Errorf(format, args...)
- }
- func Fatalf(format string, args ...interface{}) {
- logrus.Fatalf(format, args...)
- }
- func Panicf(format string, args ...interface{}) {
- logrus.Panicf(format, args...)
- }
- func Debug(args ...interface{}) {
- logrus.Debug(args...)
- }
- func Info(args ...interface{}) {
- logrus.Info(args...)
- }
- func Warn(args ...interface{}) {
- logrus.Warn(args...)
- }
- func Error(args ...interface{}) {
- logrus.Error(args...)
- }
- func Fatal(args ...interface{}) {
- logrus.Fatal(args...)
- }
- func Panic(args ...interface{}) {
- logrus.Panic(args...)
- }
- func SetGinLogger() gin.LoggerConfig {
- var c gin.LoggerConfig
- c.Output = gin.DefaultWriter
- c.Formatter = func(params gin.LogFormatterParams) string {
- userName := GetStr("userId", params.Keys, "")
- var formatStr string
- if params.StatusCode == http.StatusOK {
- formatStr = fmt.Sprintf("%s %-15s %-16s %-4s %s %d %s %s\n",
- params.TimeStamp.Format("2006-01-02 15:04:05"),
- params.ClientIP,
- userName,
- params.Method,
- params.Path,
- params.StatusCode,
- params.Latency,
- params.ErrorMessage,
- )
- } else {
- formatStr = fmt.Sprintf("\x1b[93m%s %-15s %-16s %-4s %s %d %s %s\n\x1b[0m",
- params.TimeStamp.Format("2006-01-02 15:04:05"),
- params.ClientIP,
- userName,
- params.Method,
- params.Path,
- params.StatusCode,
- params.Latency,
- params.ErrorMessage,
- )
- }
- // logrus.Infof(" %-15s %-16s %-4s %s %d %s %s", params.ClientIP, userName,
- // params.Method,
- // params.Path,
- // params.StatusCode,
- // params.Latency,
- // params.ErrorMessage,
- // )
- return formatStr
- }
- return c
- }
- func GetStr(key string, obj map[string]interface{}, def string) string {
- if val, flag := obj[key]; flag {
- if sVal, flag2 := val.(string); flag2 {
- return sVal
- }
- if sVal, flag2 := val.(int); flag2 {
- return strconv.Itoa(sVal)
- }
- }
- return def
- }
|