From 285da749e7ce7e1bd48a6f20e8ac9d7583c6d5e1 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 10 十一月 2020 10:50:45 +0800
Subject: [PATCH] 使用zap的log库,可配日志文件大小maxSize,压缩文件个数maxBackups,旧文件天数maxAge
---
logger.go | 290 ++++++++++++++++-----------------------------------------
1 files changed, 82 insertions(+), 208 deletions(-)
diff --git a/logger.go b/logger.go
index 77109db..8a375d1 100644
--- a/logger.go
+++ b/logger.go
@@ -1,225 +1,99 @@
package logger
import (
- "fmt"
- "log"
- "os"
- "os/exec"
- "strings"
+ "github.com/natefinch/lumberjack"
+ "go.uber.org/zap"
+ "go.uber.org/zap/zapcore"
"time"
)
+var logger *zap.SugaredLogger
+
const (
- PanicLevel int = iota
- FatalLevel
- ErrorLevel
- WarnLevel
+ DebugLevel = iota -1
InfoLevel
- DebugLevel
+ WarnLevel
+ ErrorLevel
+ DPanicLevel
+ PanicLevel
+ FatalLevel
)
-
-const (
- color_red = uint8(iota + 91)
- color_green // 缁�
- color_yellow // 榛�
- color_blue // 钃�
- color_magenta // 娲嬬孩
-)
-
-const (
- fatalPrefix = "[FATAL] "
- errorPrefix = "[ERROR] "
- warnPrefix = "[WARN] "
- infoPrefix = "[INFO] "
- debugPrefix = "[DEBUG] "
-)
-
-const (
- ByDay int = iota
- ByWeek
- ByMonth
- BySize
-)
-
-type LogFile struct {
- level int // 鏃ュ織绛夌骇
- saveMode int // 淇濆瓨妯″紡
- saveDays int // 鏃ュ織淇濆瓨澶╂暟
- logTime int64 //
- fileName string // 鏃ュ織鏂囦欢鍚�
- filesize int64 // 鏂囦欢澶у皬, 闇�瑕佽缃� saveMode 涓� BySize 鐢熸晥
- fileFd *os.File
-}
-
-var logFile LogFile
-
-func init() {
- //logFile.logTime = time.Now().Unix()
- logFile.saveMode = ByDay // 榛樿鎸夊ぉ淇濆瓨
- logFile.saveDays = 15 // 榛樿淇濆瓨涓夊ぉ鐨�
- logFile.level = ErrorLevel
- logFile.filesize = 1024 * 1024 * 10 // 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize
-}
-
-func Config(logFolder string, level int) {
- logFile.fileName = logFolder
- logFile.level = level
-
- log.SetOutput(logFile)
- //log.SetFlags(log.Lmicroseconds | log.Lshortfile)
- log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
-}
-func GetLogFile() (*LogFile) {
- return &logFile
-}
-
-func SetLevel(level int) {
- logFile.level = level
-}
-
-func SetSaveMode(saveMode int) {
- logFile.saveMode = saveMode
-}
-
-func SetSaveDays(saveDays int) {
- logFile.saveDays = saveDays
-}
-
-func SetSaveSize(saveSize int64) {
- logFile.filesize = saveSize
-}
-
-func Debug(args ...interface{}) {
- if logFile.level >= DebugLevel {
- log.SetPrefix(blue(debugPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
+func InitLogger(logPath string, logLevel int,maxSize int, maxBackups int, maxAge int) {
+ hook := lumberjack.Logger {
+ Filename: logPath, //鏃ュ織鏂囦欢鐨勪綅缃�
+ MaxSize: maxSize, //鍦ㄨ繘琛屽垏鍓蹭箣鍓嶏紝鏃ュ織鏂囦欢鐨勬渶澶уぇ灏忥紙浠B涓哄崟浣嶏級
+ MaxBackups: maxBackups, //淇濈暀鏃ф枃浠剁殑鏈�澶т釜鏁�
+ MaxAge: maxAge, //淇濈暀鏃ф枃浠剁殑鏈�澶уぉ鏁�
+ Compress: true, //鏄惁鍘嬬缉
+ LocalTime: true,
}
-}
+ w := zapcore.AddSync(&hook)
-func Info(args ...interface{}) {
- if logFile.level >= InfoLevel {
- log.SetPrefix(green(infoPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
+ var level zapcore.Level
+ switch logLevel {
+ case DebugLevel:
+ level = zap.DebugLevel
+ case InfoLevel:
+ level = zap.InfoLevel
+ case WarnLevel:
+ level = zap.WarnLevel
+ case ErrorLevel:
+ level = zap.ErrorLevel
+ case DPanicLevel:
+ level = zap.DPanicLevel
+ case PanicLevel:
+ level = zap.PanicLevel
+ case FatalLevel:
+ level = zap.FatalLevel
+ default:
+ level = zap.InfoLevel
}
-}
-
-func Warn(args ...interface{}) {
- if logFile.level >= WarnLevel {
- log.SetPrefix(magenta(warnPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
- }
-}
-
-func Error(args ...interface{}) {
- if logFile.level >= ErrorLevel {
- log.SetPrefix(red(errorPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
- }
-}
-
-func Fatal(args ...interface{}) {
- if logFile.level >= FatalLevel {
- log.SetPrefix(red(fatalPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
- }
-}
-
-func GetRedPrefix(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_red, s)
-}
-
-func red(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_red, s)
-}
-
-func green(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_green, s)
-}
-
-func yellow(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_yellow, s)
-}
-
-func blue(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_blue, s)
-}
-
-func magenta(s string) string {
- return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_magenta, s)
-}
-
-func (me LogFile) Write(buf []byte) (n int, err error) {
- if me.fileName == "" {
- fmt.Printf("consol: %s", buf)
- return len(buf), nil
+ encoderConfig := zap.NewProductionEncoderConfig()
+ encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
+ encoderConfig.CallerKey = "file"
+ encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
+ encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
+ enc.AppendString(t.Format("2006-01-02 15:04:05"))
}
- switch logFile.saveMode {
- case BySize:
- fileInfo, err := os.Stat(logFile.fileName)
- if err != nil {
- logFile.createLogFile()
- logFile.logTime = time.Now().Unix()
- }else {
- filesize:= fileInfo.Size();
- if logFile.fileFd == nil ||
- filesize > logFile.filesize {
- logFile.createLogFile()
- logFile.logTime = time.Now().Unix()
- }
- }
- default: // 榛樿鎸夊ぉ ByDay
- if logFile.logTime+3600*24 < time.Now().Unix() {
- logFile.createLogFile()
- logFile.logTime = time.Now().Unix()
- }
- }
-
- if logFile.fileFd == nil {
- fmt.Printf("log fileFd is nil !\n")
- return len(buf), nil
- }
-
- return logFile.fileFd.Write(buf)
+ core := zapcore.NewCore(
+ zapcore.NewConsoleEncoder(encoderConfig),
+ w,
+ level,
+ )
+ log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
+ logger = log.Sugar()
+ logger.Info("init logger success")
}
-func (me *LogFile) createLogFile() {
- logdir := "./logger/"
- if index := strings.LastIndex(me.fileName, "/"); index != -1 {
- logdir = me.fileName[0:index] + "/"
- os.MkdirAll(me.fileName[0:index], os.ModePerm)
- }
-
- now := time.Now()
- filename := fmt.Sprintf("%s_%04d%02d%02d%02d",
- me.fileName, now.Year(), now.Month(), now.Day(), now.Hour())
- if err := os.Rename(me.fileName, filename); err == nil {
- go func() {
- filenameTemp := filename + "Temp"
- rmCpCmd := exec.Command("cp", filename, filenameTemp)
- rmCpCmd.Run()
-
- tarCmd := exec.Command("tar", "-zcf", filename + ".tar.gz", filenameTemp, "--remove-files")
- tarCmd.Run()
-
- rmSrcCmd := exec.Command("rm", filename)
- rmSrcCmd.Run()
-
- rmCmd := exec.Command("/bin/sh", "-c",
- "find "+logdir+` -type f -mtime +` +string(logFile.saveDays)+ ` -exec rm {} \;`)
- rmCmd.Run()
- }()
- }
-
- for index := 0; index < 10; index++ {
- if fd, err := os.OpenFile(me.fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666); nil == err {
- me.fileFd.Sync()
- me.fileFd.Close()
- me.fileFd = fd
- break
- }else {
- fmt.Println("Open logfile error! err: ", err.Error())
- }
- me.fileFd = nil
- }
+func Debug(v ...interface{}) {
+ logger.Debug(v...)
}
+
+func Debugf(template string, v ...interface{}) {
+ logger.Debugf(template, v...)
+}
+
+func Info(v ...interface{}) {
+ logger.Info(v)
+}
+
+func Infof(template string, v ...interface{}) {
+ logger.Infof(template, v...)
+}
+
+func Warn(v ...interface{}) {
+ logger.Warn(v...)
+}
+
+func Warnf(template string, v ...interface{}) {
+ logger.Warnf(template, v...)
+}
+
+func Error(v ...interface{}) {
+ logger.Error(v...)
+}
+
+func Errorf(template string, v ...interface{}) {
+ logger.Errorf(template, v...)
+}
\ No newline at end of file
--
Gitblit v1.8.0