Browse Source

feat:开发zaplog

renzheng 3 years ago
parent
commit
b8f8071fce
5 changed files with 118 additions and 8 deletions
  1. 5 0
      .gitignore
  2. 3 0
      go.mod
  3. 6 0
      go.sum
  4. 87 8
      zaplog/zaplog.go
  5. 17 0
      zaplog/zaplog_test.go

+ 5 - 0
.gitignore

@@ -32,3 +32,8 @@ golog/jylog
 golog/jylog/*
 golog/*.exe
 
+zaplog/jylog
+zaplog/jylog/*
+zaplog/*.exe
+
+

+ 3 - 0
go.mod

@@ -3,6 +3,9 @@ module bp.jydev.jianyu360.cn/BP/jylog
 go 1.16
 
 require (
+	github.com/BurntSushi/toml v1.0.0 // indirect
+	github.com/natefinch/lumberjack v2.0.0+incompatible
 	github.com/robfig/cron v1.2.0
 	go.uber.org/zap v1.20.0
+	gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
 )

+ 6 - 0
go.sum

@@ -1,3 +1,5 @@
+github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
+github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -6,6 +8,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
+github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -52,6 +56,8 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 87 - 8
zaplog/zaplog.go

@@ -1,18 +1,97 @@
 package zaplog
 
 import (
+	"fmt"
+	"os"
+
+	"github.com/natefinch/lumberjack"
 	"go.uber.org/zap"
+	"go.uber.org/zap/zapcore"
+)
+
+var (
+	ZapLogger *zap.Logger
+	Sugar     *zap.SugaredLogger
 )
 
-func InitZaplog() {
+type C struct {
+	File       string //文件路径,默认当前jylog/app.log
+	IsJson     bool   //json 或 普通格式,默认普通格式
+	IsDebug    bool   //是否是调试模式,默认非调试
+	Level      int    //日志级别 1=debug 2=info 默认2 3=warn 4=error 5=dpanic 6=panic 7=fatal
+	MaxSize    int    // 每个日志文件保存的大小 单位:M  默认2048
+	MaxAge     int    // 文件最多保存多少天  默认15
+	MaxBackups int    // 日志文件最多保存多少个备份 默认15
+	NoCompress bool   // 是否不压缩,默认压缩
+	AppName    string //应用名称,无
+
+}
 
-	logger, _ := zap.NewProduction()
-	defer logger.Sync()
-	logger.Info("failed to fetch URL",
-		// Structured context as strongly typed Field values.
-		zap.String("url", "asasasasasas"),
-		zap.Int("attempt", 3),
-		zap.Duration("backoff", time.Second),
+func InitZaplog(config ...*C) {
+	c := &C{}
+	if len(config) > 0 {
+		c = config[0]
+	}
+	if c.File == "" {
+		c.File = "./jylog/app.log"
+	}
+	if c.Level == 0 {
+		c.Level = 2
+	}
+	if c.MaxSize == 0 {
+		c.MaxSize = 2048
+	}
+	if c.MaxAge == 0 {
+		c.MaxAge = 15
+	}
+	if c.MaxBackups == 0 {
+		c.MaxBackups = 15
+	}
+	hook := lumberjack.Logger{
+		Filename:   c.File,       // 日志文件路径
+		MaxSize:    c.MaxSize,    // 每个日志文件保存的大小 单位:M
+		MaxAge:     c.MaxAge,     // 文件最多保存多少天
+		MaxBackups: c.MaxBackups, // 日志文件最多保存多少个备份
+		LocalTime:  true,
+		Compress:   !c.NoCompress, // 是否压缩
+	}
+	atomicLevel := zap.NewAtomicLevel()
+	atomicLevel.SetLevel(zapcore.Level(c.Level - 2))
+	var writes = []zapcore.WriteSyncer{zapcore.AddSync(&hook)}
+	// 如果是开发环境,同时在控制台上也输出
+	if c.IsDebug {
+		writes = append(writes, zapcore.AddSync(os.Stdout))
+	}
+	encoderConfig := zap.NewProductionEncoderConfig()
+	encoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
+	var zencoder zapcore.Encoder
+	if c.IsJson {
+		zencoder = zapcore.NewJSONEncoder(encoderConfig)
+	} else {
+		zencoder = zapcore.NewConsoleEncoder(encoderConfig)
+	}
+	core := zapcore.NewCore(
+		zencoder,
+		zapcore.NewMultiWriteSyncer(writes...),
+		atomicLevel,
 	)
+	args := []zap.Option{zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)}
+	if c.AppName != "" {
+		args = append(args, zap.Fields(zap.String("App", c.AppName)))
+	}
+	ZapLogger = zap.New(core, args...)
+	Sugar = ZapLogger.Sugar()
+	ZapLogger.Info("zaplog inited.")
+}
+
+func Print(v ...interface{}) {
+	Sugar.Info(v)
+}
+
+func Println(v ...interface{}) {
+	Sugar.Info(v)
+}
 
+func Printf(format string, v ...interface{}) {
+	Sugar.Info(fmt.Sprintf(format, v...))
 }

+ 17 - 0
zaplog/zaplog_test.go

@@ -0,0 +1,17 @@
+package zaplog
+
+import (
+	"testing"
+	"time"
+
+	"go.uber.org/zap"
+)
+
+func Test_zap(t *testing.T) {
+	InitZaplog()
+	ZapLogger.Debug("debug")
+	ZapLogger.Info("msg", zap.Any("j", 1))
+	ZapLogger.DPanic("error")
+	time.Sleep(10 * time.Second)
+
+}