From 76ee1245a5be00553a4971035c04fc057177be97 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期一, 08 七月 2019 14:03:33 +0800
Subject: [PATCH] get faceFea from FaceDetect sdk

---
 extend/logger/logger.go |  216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 216 insertions(+), 0 deletions(-)

diff --git a/extend/logger/logger.go b/extend/logger/logger.go
index 90c66f6..73b919c 100644
--- a/extend/logger/logger.go
+++ b/extend/logger/logger.go
@@ -1 +1,217 @@
 package logger
+
+import (
+	"fmt"
+	"log"
+	"os"
+	"os/exec"
+	"strings"
+	"time"
+)
+
+const (
+	PanicLevel int = iota
+	FatalLevel
+	ErrorLevel
+	WarnLevel
+	InfoLevel
+	DebugLevel
+)
+
+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)
+}
+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 < 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

--
Gitblit v1.8.0