luoyangwei vor 1 Jahr
Ursprung
Commit
343f20b3f4

+ 1 - 0
.vscode/settings.json

@@ -1,6 +1,7 @@
 {
     "cSpell.words": [
         "benew",
+        "fiberlog",
         "valyala"
     ]
 }

+ 15 - 1
config/local.yml

@@ -1,4 +1,5 @@
 server:
+    name: ext
     port: 9000
 
 storage:
@@ -12,4 +13,17 @@ storage:
 # 高德地图配置
 amap:
     key: "a4952dd01d3f605ce2af33e61031f365"
-    url: "http://apilocate.amap.com/position"
+    url: "http://apilocate.amap.com/position"
+
+log:
+    # level 日志等级
+    # encoding: console # json or console
+    # 之前通过 encoding 字段来设置输出的格式, 但实际情况中需要debug日志时都是 console 格式的日志
+    # 所以这里将 encoding 字段和 level 字段的使用方式合并, 接下来会判断 level 的值是否是 debug 格式
+    # 如果是 debug 则输出 console 格式的日志, 否则输出 json 格式的日志
+    level: debug
+    log_file_name: "./storage/log/%s.log"
+    max_backups: 7
+    max_age: 7
+    max_size: 512
+    compress: true

+ 14 - 0
config/prod.yml

@@ -1,2 +1,16 @@
 server:
     port: 9000
+
+
+log:
+    # level 日志等级
+    # encoding: console # json or console
+    # 之前通过 encoding 字段来设置输出的格式, 但实际情况中需要debug日志时都是 console 格式的日志
+    # 所以这里将 encoding 字段和 level 字段的使用方式合并, 接下来会判断 level 的值是否是 debug 格式
+    # 如果是 debug 则输出 console 格式的日志, 否则输出 json 格式的日志
+    level: debug
+    log_file_name: "/var/log/benew/%s.log"
+    max_backups: 7
+    max_age: 7
+    max_size: 512
+    compress: true

+ 14 - 0
config/test.yml

@@ -13,3 +13,17 @@ storage:
 amap:
     key: "a4952dd01d3f605ce2af33e61031f365"
     url: "http://apilocate.amap.com/position"
+
+
+log:
+    # level 日志等级
+    # encoding: console # json or console
+    # 之前通过 encoding 字段来设置输出的格式, 但实际情况中需要debug日志时都是 console 格式的日志
+    # 所以这里将 encoding 字段和 level 字段的使用方式合并, 接下来会判断 level 的值是否是 debug 格式
+    # 如果是 debug 则输出 console 格式的日志, 否则输出 json 格式的日志
+    level: debug
+    log_file_name: "/var/log/benew/%s.log"
+    max_backups: 7
+    max_age: 7
+    max_size: 512
+    compress: true

+ 1 - 1
go.mod

@@ -11,10 +11,10 @@ require (
 	github.com/jmoiron/sqlx v1.4.0
 	github.com/joho/godotenv v1.5.1
 	github.com/rotisserie/eris v0.5.4
+	github.com/rs/zerolog v1.33.0
 	github.com/sony/sonyflake v1.2.0
 	github.com/spf13/viper v1.19.0
 	github.com/valyala/fasthttp v1.55.0
-	go.uber.org/zap v1.27.0
 	gopkg.in/natefinch/lumberjack.v2 v2.2.1
 )
 

+ 7 - 4
go.sum

@@ -10,6 +10,7 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/
 github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
 github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
+github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -20,6 +21,7 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
 github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gofiber/fiber/v3 v3.0.0-beta.3 h1:7Q2I+HsIqnIEEDB+9oe7Gadpakh6ZLhXpTYz/L20vrg=
 github.com/gofiber/fiber/v3 v3.0.0-beta.3/go.mod h1:kcMur0Dxqk91R7p4vxEpJfDWZ9u5IfvrtQc8Bvv/JmY=
 github.com/gofiber/utils/v2 v2.0.0-beta.4 h1:1gjbVFFwVwUb9arPcqiB6iEjHBwo7cHsyS41NeIW3co=
@@ -60,6 +62,7 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v
 github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
@@ -68,6 +71,7 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
 github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
 github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -75,6 +79,9 @@ github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZV
 github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
 github.com/rotisserie/eris v0.5.4 h1:Il6IvLdAapsMhvuOahHWiBnl1G++Q0/L5UIkI5mARSk=
 github.com/rotisserie/eris v0.5.4/go.mod h1:Z/kgYTJiJtocxCbFfvRmO+QejApzG6zpyky9G1A4g9s=
+github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
+github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
+github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
 github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
 github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
 github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
@@ -113,12 +120,8 @@ github.com/valyala/fasthttp v1.55.0/go.mod h1:NkY9JtkrpPKmgwV3HTaS2HWaJss9RSIsRV
 github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
 github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
 go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU=
 golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

+ 2 - 2
internal/middleware/versioning.go

@@ -2,7 +2,7 @@ package middleware
 
 import (
 	"github.com/gofiber/fiber/v3"
-	"github.com/gofiber/fiber/v3/log"
+	"github.com/rs/zerolog/log"
 	v1 "sikey.com.cn/benew/ext/api/v1"
 )
 
@@ -32,7 +32,7 @@ func (v *Versioning) Build() fiber.Handler {
 		}
 
 		if version := fiber.GetReqHeader[string](ctx, httpVersionHeaderKey); version != "" {
-			log.Infow("version", "version", version)
+			log.Info().Str("version", version).Msg("versioning")
 			for _, route := range v.routes {
 				if routeVersion, ok := route[version]; ok {
 					return routeVersion(ctx)

+ 2 - 2
internal/middleware/white_iplist.go

@@ -4,8 +4,8 @@ import (
 	"strings"
 
 	"github.com/gofiber/fiber/v3"
-	"github.com/gofiber/fiber/v3/log"
 	"github.com/gofiber/fiber/v3/middleware/requestid"
+	"github.com/rs/zerolog/log"
 	"github.com/valyala/fasthttp"
 	"sikey.com.cn/benew/ext/internal/service"
 )
@@ -17,7 +17,7 @@ func NewWhiteIplist(whiteIplistService *service.WhiteIplistService) fiber.Handle
 		if hit {
 			return c.Next()
 		} else {
-			log.Infow("请求被拦截, 未命中白名单列表", "ip", ip, "requestId", requestid.FromContext(c))
+			log.Info().Str("ip", ip).Str("requestId", requestid.FromContext(c)).Msg("请求被拦截, 未命中白名单列表")
 			return fiber.ErrUnauthorized
 		}
 	}

+ 3 - 2
internal/service/amap_service.go

@@ -12,8 +12,8 @@ import (
 	"time"
 
 	"github.com/bytedance/sonic"
-	"github.com/gofiber/fiber/v3/log"
 	"github.com/rotisserie/eris"
+	"github.com/rs/zerolog/log"
 	"github.com/spf13/viper"
 	v1 "sikey.com.cn/benew/ext/api/v1"
 	"sikey.com.cn/benew/ext/internal/model"
@@ -67,7 +67,8 @@ type amapResult struct {
 func (s *AMapService) flooding(ctx context.Context, request *v1.PostLocationRequest) (*v1.PostLocationResponse, bool) {
 	mapLocation, err := s.mapLocationModel.SelectByDuration(ctx, request.ID, 60*time.Second)
 	if err != nil {
-		log.Errorw("flooding", "err", eris.Wrap(err, "select by duration"))
+		log.Error().Stack().Err(eris.Wrap(err, "select by duration")).
+			Msg("flooding select by duration error")
 		return nil, false
 	}
 

+ 3 - 3
internal/service/white_list_service.go

@@ -5,7 +5,7 @@ import (
 	"sync"
 	"time"
 
-	"github.com/gofiber/fiber/v3/log"
+	"github.com/rs/zerolog/log"
 	"sikey.com.cn/benew/ext/internal/model"
 )
 
@@ -39,10 +39,10 @@ func NewWhiteIplistService(whiteIplistModel *model.WhiteIplistModel) *WhiteIplis
 func (s *WhiteIplistService) updateIplistTask() {
 	whiteIplist, err := s.whiteIplistModel.Select(context.TODO())
 	if err != nil {
-		log.Errorw("updateIplistTask", "err", err)
+		log.Error().Stack().Err(err).Msg("updateIplistTask")
 		return
 	}
-	
+
 	s.iplistMutex.Lock()
 	defer s.iplistMutex.Unlock()
 

+ 15 - 76
pkg/log/log.go

@@ -2,50 +2,27 @@ package log
 
 import (
 	"fmt"
+	"io"
 	"os"
-	"time"
 
-	"github.com/spf13/viper"
-	"go.uber.org/zap"
-	"go.uber.org/zap/zapcore"
+	"github.com/rs/zerolog"
+	"github.com/rs/zerolog/log"
 	"gopkg.in/natefinch/lumberjack.v2"
-)
-
-type CustomLogger struct {
-	*zap.Logger
-	Write zapcore.WriteSyncer
-}
 
-func NewLogger(conf *viper.Viper) *CustomLogger {
-	level := zapcoreLevel(conf.GetString("log.level"))
-	encoder := newZapcoreEncoder(level)
-	writeSyncer := zapcore.NewMultiWriteSyncer(
-		zapcore.AddSync(os.Stdout),
-		zapcore.AddSync(withLumberjack(conf)),
-	)
-	loggerCore := zapcore.NewCore(encoder, writeSyncer, level)
-	return &CustomLogger{Logger: zap.New(
-		loggerCore,
-		zap.Development(),
-		zap.AddCaller(),
-		zap.AddCallerSkip(3), // 固定是3
-		zap.AddStacktrace(zap.ErrorLevel),
-	), Write: writeSyncer}
-}
+	"github.com/spf13/viper"
+)
 
-func zapcoreLevel(l string) zapcore.Level {
-	switch l {
-	case "debug":
-		return zapcore.DebugLevel
-	case "info":
-		return zapcore.InfoLevel
-	case "warn":
-		return zapcore.WarnLevel
-	case "error":
-		return zapcore.ErrorLevel
-	default:
-		return zapcore.InfoLevel
+func NewLogger(conf *viper.Viper) {
+	// UNIX Time is faster and smaller than most timestamps
+	zerolog.TimeFieldFormat = "2006/01/02 15:04:05.000000"
+	consoleWriter := zerolog.ConsoleWriter{
+		Out: io.MultiWriter(
+			os.Stdout,
+			withLumberjack(conf),
+		),
+		TimeFormat: "2006/01/02 15:04:05.000000",
 	}
+	log.Logger = log.Output(consoleWriter).With().Caller().Logger()
 }
 
 func withLumberjack(conf *viper.Viper) *lumberjack.Logger {
@@ -57,41 +34,3 @@ func withLumberjack(conf *viper.Viper) *lumberjack.Logger {
 		Compress:   conf.GetBool("log.compress"),                                                    // Compression or not
 	}
 }
-
-func newZapcoreEncoder(level zapcore.Level) zapcore.Encoder {
-	if level == zapcore.DebugLevel {
-		return zapcore.NewConsoleEncoder(zapcore.EncoderConfig{
-			TimeKey:        "ts",
-			LevelKey:       "level",
-			NameKey:        "logger",
-			CallerKey:      "caller",
-			FunctionKey:    zapcore.OmitKey,
-			MessageKey:     "msg",
-			StacktraceKey:  "stacktrace",
-			LineEnding:     zapcore.DefaultLineEnding,
-			EncodeLevel:    zapcore.CapitalColorLevelEncoder,
-			EncodeTime:     timeEncoder,
-			EncodeDuration: zapcore.SecondsDurationEncoder,
-			EncodeCaller:   zapcore.ShortCallerEncoder,
-		})
-	} else {
-		return zapcore.NewJSONEncoder(zapcore.EncoderConfig{
-			TimeKey:        "ts",
-			LevelKey:       "level",
-			NameKey:        "logger",
-			CallerKey:      "caller",
-			FunctionKey:    zapcore.OmitKey,
-			MessageKey:     "msg",
-			StacktraceKey:  "stacktrace",
-			LineEnding:     zapcore.DefaultLineEnding,
-			EncodeLevel:    zapcore.CapitalLevelEncoder,
-			EncodeTime:     zapcore.EpochTimeEncoder,
-			EncodeDuration: zapcore.SecondsDurationEncoder,
-			EncodeCaller:   zapcore.ShortCallerEncoder,
-		})
-	}
-}
-
-func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
-	enc.AppendString(t.Format("2006-01-02 15:04:05.000000000"))
-}

+ 5 - 2
server/server.go

@@ -5,10 +5,11 @@ import (
 
 	"github.com/bytedance/sonic"
 	"github.com/gofiber/fiber/v3"
-	"github.com/gofiber/fiber/v3/log"
 	"github.com/gofiber/fiber/v3/middleware/requestid"
+	"github.com/rs/zerolog/log"
 	"github.com/spf13/viper"
 	"sikey.com.cn/benew/ext/internal/middleware"
+	customLogger "sikey.com.cn/benew/ext/pkg/log"
 )
 
 type ExtServer struct {
@@ -19,6 +20,8 @@ type ExtServer struct {
 }
 
 func NewExtServer(conf *viper.Viper, router *ExtRouter) *ExtServer {
+	customLogger.NewLogger(conf)
+
 	app := fiber.New(fiber.Config{
 		AppName:     "BenewExt",
 		ColorScheme: fiber.DefaultColors,
@@ -36,7 +39,7 @@ func NewExtServer(conf *viper.Viper, router *ExtRouter) *ExtServer {
 }
 
 func (srv *ExtServer) Run() error {
-	log.Infof("Server is running on port :%d", srv.port)
+	log.Info().Msgf("Server is running on port :%d", srv.port)
 	return srv.App.Listen(fmt.Sprintf(":%d", srv.port))
 }