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