feat(log):加入zerolog和lumberjack的支持,实现日志功能的初步封装。

This commit is contained in:
徐涛
2022-09-08 13:15:51 +08:00
parent c433652326
commit 4f11249b94
6 changed files with 153 additions and 2 deletions

61
logger/logger.go Normal file
View File

@@ -0,0 +1,61 @@
package logger
import (
"io"
"os"
"github.com/rs/zerolog"
"github.com/samber/lo"
)
var logger *zerolog.Logger
func init() {
var writers []io.Writer
writers = append(writers, zerolog.ConsoleWriter{Out: os.Stderr})
writers = append(writers, newRollingWriter())
mw := io.MultiWriter(writers...)
logger = lo.ToPtr(zerolog.New(mw).With().Timestamp().Logger())
logger.Info().Msg("Logger initialized.")
}
func Panic() *zerolog.Event {
return logger.Panic()
}
func Fatal() *zerolog.Event {
return logger.Fatal()
}
func Error() *zerolog.Event {
return logger.Error()
}
func Warn() *zerolog.Event {
return logger.Warn()
}
func Info() *zerolog.Event {
return logger.Info()
}
func Debug() *zerolog.Event {
return logger.Debug()
}
func Trace() *zerolog.Event {
return logger.Trace()
}
func Print(v ...interface{}) {
logger.Print(v...)
}
func Printf(format string, v ...interface{}) {
logger.Printf(format, v...)
}
func With() zerolog.Context {
return logger.With()
}

43
logger/middleware.go Normal file
View File

@@ -0,0 +1,43 @@
package logger
import (
"time"
"github.com/gin-gonic/gin"
)
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
path := c.Request.URL.Path
raw := c.Request.URL.RawQuery
// Process request
c.Next()
latency := time.Since(start)
clientIP := c.ClientIP()
method := c.Request.Method
statusCode := c.Writer.Status()
comment := c.Errors.ByType(gin.ErrorTypePrivate).String()
if raw != "" {
path = path + "?" + raw
}
event := logger.Info()
if comment != "" {
event = logger.Error()
}
event.
Int("statusCode", statusCode).
Dur("latency", latency).
Str("clientIP", clientIP).
Str("method", method).
Str("path", path).
Msg(comment)
}
}

27
logger/rolling.go Normal file
View File

@@ -0,0 +1,27 @@
package logger
import (
"fmt"
"io"
"os"
"time"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
)
func newRollingWriter() io.Writer {
if err := os.MkdirAll("log", 0744); err != nil {
log.Error().Err(err).Str("path", "./log").Msg("不能创建用于保存日志的目录。")
return nil
}
now := time.Now()
return &lumberjack.Logger{
Filename: fmt.Sprintf("log/%04d-%02d-%02d.log", now.Year(), now.Month(), now.Day()),
MaxBackups: 0, // files
MaxSize: 200, // megabytes
MaxAge: 0, // days
}
}