From 54796f5e2227764ef21449c2ddb0593d092bd6aa Mon Sep 17 00:00:00 2001
From: yanghui <yanghui@aiotlink.com>
Date: 星期一, 26 四月 2021 17:17:49 +0800
Subject: [PATCH] complete log

---
 logc.go |   28 +++++++++++--
 log.go  |   54 +++++++++++++++++++++++++++
 2 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/log.go b/log.go
new file mode 100644
index 0000000..468829b
--- /dev/null
+++ b/log.go
@@ -0,0 +1,54 @@
+package logc
+
+import "fmt"
+
+type printer func (v ...interface{})
+
+type logPrinter interface {
+	Fatal(v ...interface{})
+
+	Error(v ...interface{})
+
+	Warn(v ...interface{})
+
+	Info(v ...interface{})
+}
+
+type Log struct {
+	FatalLog printer
+	ErrorLog printer
+	WarnLog  printer
+	InfoLog  printer
+}
+
+func (p Log)Fatal(v ...interface{}) {
+	if nil == p.FatalLog {
+		fmt.Println(v...)
+	} else {
+		p.FatalLog(v...)
+	}
+}
+
+func (p Log)Error(v ...interface{}) {
+	if nil == p.ErrorLog {
+		fmt.Println(v...)
+	} else {
+		p.ErrorLog(v...)
+	}
+}
+
+func (p Log)Warn(v ...interface{}) {
+	if nil == p.WarnLog {
+		fmt.Println(v...)
+	} else {
+		p.WarnLog(v...)
+	}
+}
+
+func (p Log)Info(v ...interface{}) {
+	if nil == p.InfoLog {
+		fmt.Println(v...)
+	} else {
+		p.InfoLog(v...)
+	}
+}
diff --git a/logc.go b/logc.go
index 7eddc7e..dca99a3 100644
--- a/logc.go
+++ b/logc.go
@@ -48,12 +48,18 @@
 
 var (
 	opChan chan *OperationLog
-
+	logger *Log
 )
 
 
-func Init(flogWriter LogReportCallback, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
+func Init(flogWriter LogReportCallback, log *Log, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
 	opChan = make(chan *OperationLog, 100)
+	if nil != log {
+		logger = log
+	} else {
+		logger = &Log{}
+	}
+
 	//ProcName = procName
 	//ProcID = procId
 
@@ -62,9 +68,21 @@
 	return true
 }
 
-func SaveOperationLog(log *OperationLog) {
-	if nil != log {
-		opChan <- log
+func SaveOperationLog(log *OperationLog, timeout time.Duration) {
+	if nil == log {
+		return
+	}
+
+	select {
+	case opChan <- log:
+		return
+	case <-time.After(timeout):
+		var info string
+		b, err := json.Marshal(log)
+		if nil == err {
+			info = string(b)
+		}
+		logger.Fatal("SaveOperationLog failed to save log", info)
 	}
 }
 

--
Gitblit v1.8.0