forked from free-lancers/electricity_bill_calc_service
feat(log):加入zerolog和lumberjack的支持,实现日志功能的初步封装。
This commit is contained in:
61
logger/logger.go
Normal file
61
logger/logger.go
Normal 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
43
logger/middleware.go
Normal 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
27
logger/rolling.go
Normal 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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user