From 9fc8aaf3af0a179dbb2e614496d39c922661de4a Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期三, 23 十月 2019 17:57:54 +0800
Subject: [PATCH] 改造日志的输出方式

---
 labelFilter/req.go               |    2 
 insertdata/EsClient.go           |    2 
 logger/logger.go                 |  225 +++++++++++++++++++++++++++++++++++++++++++++
 insertdata/insertDataToEs.go     |    2 
 ruleserver/server.go             |    2 
 ruleserver/ruleToformula.go      |    2 
 main.go                          |    3 
 ruleserver/personTrack.go        |    2 
 labelFilter/readyDataForLabel.go |    2 
 labelFilter/ruleForLabel.go      |    2 
 ruleserver/readyDataForRule.go   |    2 
 ruleserver/timeTicker.go         |    2 
 12 files changed, 237 insertions(+), 11 deletions(-)

diff --git a/insertdata/EsClient.go b/insertdata/EsClient.go
index 6ecd30a..c83eb87 100644
--- a/insertdata/EsClient.go
+++ b/insertdata/EsClient.go
@@ -7,7 +7,7 @@
 	"io"
 	"io/ioutil"
 	"net/http"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"strconv"
 	"strings"
 	"time"
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index 99dc7f9..f5804c4 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -1,7 +1,7 @@
 package insertdata
 
 import (
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"encoding/base64"
 	"encoding/json"
 	"errors"
diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go
index c7f405d..0c99550 100644
--- a/labelFilter/readyDataForLabel.go
+++ b/labelFilter/readyDataForLabel.go
@@ -1,7 +1,7 @@
 package labelFilter
 
 import (
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"ruleprocess/cache"
 	"ruleprocess/structure"
 	"time"
diff --git a/labelFilter/req.go b/labelFilter/req.go
index dd34d69..2fab521 100644
--- a/labelFilter/req.go
+++ b/labelFilter/req.go
@@ -1,7 +1,7 @@
 package labelFilter
 
 import (
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"fmt"
 	"github.com/golang/protobuf/proto"
 	"nanomsg.org/go-mangos"
diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index 3b03b8d..23b27da 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -3,7 +3,7 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"github.com/knetic/govaluate"
 	"ruleprocess/structure"
 	"strconv"
diff --git a/logger/logger.go b/logger/logger.go
new file mode 100644
index 0000000..dce391b
--- /dev/null
+++ b/logger/logger.go
@@ -0,0 +1,225 @@
+package logger
+
+import (
+	"fmt"
+	"log"
+	"os"
+	"os/exec"
+	"strings"
+	"time"
+)
+
+const (
+	PanicLevel int = iota
+	FatalLevel
+	ErrorLevel
+	WarnLevel
+	InfoLevel
+	DebugLevel
+)
+var loggerString string = ""
+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 = 7        // 榛樿淇濆瓨涓夊ぉ鐨�
+	logFile.level = DebugLevel
+	//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)
+}
+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...))
+		loggerString += fmt.Sprintln(args...)
+	}
+}
+
+func Info(args ...interface{}) {
+	if logFile.level >= InfoLevel {
+		log.SetPrefix(green(infoPrefix))
+		//_ = log.Output(2, fmt.Sprintln(args...))
+		loggerString += fmt.Sprintln(args...)
+	}
+}
+
+func Warn(args ...interface{}) {
+	if logFile.level >= WarnLevel {
+		log.SetPrefix(magenta(warnPrefix))
+		//_ = log.Output(2, fmt.Sprintln(args...))
+		loggerString += fmt.Sprintln(args...)
+	}
+}
+
+func Error(args ...interface{}) {
+	if logFile.level >= ErrorLevel {
+		log.SetPrefix(red(errorPrefix))
+		//_ = log.Output(2, fmt.Sprintln(args...))
+		loggerString += fmt.Sprintln(args...)
+	}
+}
+
+func Fatal(args ...interface{}) {
+	if logFile.level >= FatalLevel {
+		log.SetPrefix(red(fatalPrefix))
+		//_ = log.Output(2, fmt.Sprintln(args...))
+		loggerString += fmt.Sprintln(args...)
+	}
+}
+func OutPutByPanlei() {
+	_ = log.Output(2, loggerString)
+}
+
+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 < 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() {
+	logdir := "./"
+	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",
+		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()
+		}()
+	}
+
+	for index := 0; index < 10; index++ {
+		if fd, err := os.OpenFile(me.fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, os.ModeExclusive); nil == err {
+			me.fileFd.Sync()
+			me.fileFd.Close()
+			me.fileFd = fd
+			break
+		}else {
+			fmt.Println("Open logfile error! err: ", err.Error())
+		}
+		me.fileFd = nil
+	}
+}
\ No newline at end of file
diff --git a/main.go b/main.go
index 7606135..7df1578 100644
--- a/main.go
+++ b/main.go
@@ -7,6 +7,7 @@
 	"net/http"
 	_ "net/http/pprof"
 	"ruleprocess/insertdata"
+	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"ruleprocess/util"
 	"time"
@@ -16,7 +17,6 @@
 	"flag"
 	"fmt"
 	"github.com/golang/protobuf/proto"
-	"basic.com/valib/logger.git"
 	//"gocv.io/x/gocv"
 	//"image"
 	//"image/color"
@@ -107,6 +107,7 @@
 					logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", time.Since(start))
 					//浜嬩欢鎺ㄩ��
 					//go labelFilter.Judge(resultMsg)
+					logger.OutPutByPanlei()
 				}(msg)
 			}
 		}
diff --git a/ruleserver/personTrack.go b/ruleserver/personTrack.go
index b7639f5..7abe6fe 100644
--- a/ruleserver/personTrack.go
+++ b/ruleserver/personTrack.go
@@ -2,7 +2,7 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"github.com/golang/protobuf/proto"
 	"ruleprocess/structure"
 	"sync"
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index b547b9c..ec483a8 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -13,7 +13,7 @@
 	"nanomsg.org/go-mangos/transport/tcp"
 	"net"
 	"ruleprocess/cache"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 	"time"
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index d099a52..6332d81 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -3,7 +3,7 @@
 import (
 	"ruleprocess/cache"
 	"ruleprocess/structure"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"sort"
 	"strconv"
 	"strings"
diff --git a/ruleserver/server.go b/ruleserver/server.go
index 28d6c39..b3ac5dc 100644
--- a/ruleserver/server.go
+++ b/ruleserver/server.go
@@ -4,7 +4,7 @@
 	"basic.com/pubsub/protomsg.git"
 	"basic.com/valib/gopherdiscovery.git"
 	"github.com/gogo/protobuf/proto"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"time"
 )
 
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index 7650091..3d258e8 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -2,7 +2,7 @@
 
 import (
 	"fmt"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strings"
 	"time"

--
Gitblit v1.8.0