|
@@ -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...))
|
|
|
}
|