From 311cf16f18049d43fbda4ce357193f210d07496a Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 10 十一月 2020 11:38:16 +0800
Subject: [PATCH] 添加GetLogFile方法,实现ioWritter接口
---
logger.go | 309 ++++++++++++++++++---------------------------------
1 files changed, 108 insertions(+), 201 deletions(-)
diff --git a/logger.go b/logger.go
index 1e94d21..bf7635f 100644
--- a/logger.go
+++ b/logger.go
@@ -1,217 +1,124 @@
package logger
import (
- "fmt"
- "log"
+ "github.com/natefinch/lumberjack"
+ "go.uber.org/zap"
+ "go.uber.org/zap/zapcore"
"os"
- "os/exec"
"strings"
"time"
)
+type BLog struct {
+ logger *zap.SugaredLogger
+}
+
+func (l *BLog) Write(buf []byte) (n int, err error) {
+ l.logger.Debug(string(buf))
+ return len(buf),nil
+}
+
+func GetLogFile() *BLog {
+ return blog
+}
+
+var blog *BLog
+
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.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 Info(args ...interface{}) {
- if logFile.level >= InfoLevel {
- log.SetPrefix(green(infoPrefix))
- _ = log.Output(2, fmt.Sprintln(args...))
- }
-}
-
-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
- }
-
- 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)
-}
-
-func (me *LogFile) createLogFile() {
+func InitLogger(logPath string, logLevel int,maxSize int, maxBackups int, maxAge int) {
logdir := "./logger/"
- if index := strings.LastIndex(me.fileName, "/"); index != -1 {
- logdir = me.fileName[0:index] + "/"
- os.MkdirAll(me.fileName[0:index], os.ModePerm)
+ if index := strings.LastIndex(logPath, "/"); index != -1 {
+ logdir = logPath[0:index] + "/"
+ }
+ fi,err := os.Stat(logdir)
+ if !((err == nil || os.IsExist(err)) && fi.IsDir()) {
+ os.MkdirAll(logdir, os.ModePerm)
+ }
+ hook := lumberjack.Logger {
+ Filename: logPath, //鏃ュ織鏂囦欢鐨勪綅缃�
+ MaxSize: maxSize, //鍦ㄨ繘琛屽垏鍓蹭箣鍓嶏紝鏃ュ織鏂囦欢鐨勬渶澶уぇ灏忥紙浠B涓哄崟浣嶏級
+ MaxBackups: maxBackups, //淇濈暀鏃ф枃浠剁殑鏈�澶т釜鏁�
+ MaxAge: maxAge, //淇濈暀鏃ф枃浠剁殑鏈�澶уぉ鏁�
+ Compress: true, //鏄惁鍘嬬缉
+ LocalTime: true,
+ }
+ w := zapcore.AddSync(&hook)
+
+ 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
+ }
+ 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"))
}
- now := time.Now()
- filename := fmt.Sprintf("%s_%04d%02d%02d",
- me.fileName, now.Year(), now.Month(), now.Day())
- if err := os.Rename(me.fileName, filename); err == nil {
- go func() {
- tarCmd := exec.Command("tar", "-zcf", filename+".tar.gz", filename, "--remove-files")
- tarCmd.Run()
-
- rmCmd := exec.Command("/bin/sh", "-c",
- "find "+logdir+` -type f -mtime +` +string(logFile.saveDays)+ ` -exec rm {} \;`)
- rmCmd.Run()
- }()
+ core := zapcore.NewCore(
+ zapcore.NewConsoleEncoder(encoderConfig),
+ w,
+ level,
+ )
+ log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
+ blog = &BLog{
+ logger: log.Sugar(),
}
-
- 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
- }
+ blog.logger.Info("init logger success")
}
+
+func Debug(v ...interface{}) {
+ blog.logger.Debug(v...)
+}
+
+func Debugf(template string, v ...interface{}) {
+ blog.logger.Debugf(template, v...)
+}
+
+func Info(v ...interface{}) {
+ blog.logger.Info(v)
+}
+
+func Infof(template string, v ...interface{}) {
+ blog.logger.Infof(template, v...)
+}
+
+func Warn(v ...interface{}) {
+ blog.logger.Warn(v...)
+}
+
+func Warnf(template string, v ...interface{}) {
+ blog.logger.Warnf(template, v...)
+}
+
+func Error(v ...interface{}) {
+ blog.logger.Error(v...)
+}
+
+func Errorf(template string, v ...interface{}) {
+ blog.logger.Errorf(template, v...)
+}
\ No newline at end of file
--
Gitblit v1.8.0