From 531d708f7bfeb94798c554f37c9047c21850244e Mon Sep 17 00:00:00 2001 From: haidy Date: Wed, 26 Dec 2018 22:48:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/frp/log.go | 19 +++++++++++++++++++ utils/log/log.go | 5 +++++ utils/log/log_extend.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 cmd/frp/log.go create mode 100644 utils/log/log_extend.go diff --git a/cmd/frp/log.go b/cmd/frp/log.go new file mode 100644 index 00000000..fed41359 --- /dev/null +++ b/cmd/frp/log.go @@ -0,0 +1,19 @@ +package frp + +import "github.com/fatedier/frp/utils/log" + +type FrpLogListener interface { + Log(log string) + Location() string +} + +// type FrpLogListener struct { +// name string +// } + +// func (l *FrpLogListener) Log(log string) { +// } + +func SetFrpLogListener(l FrpLogListener) { + log.AppendListener(l) +} diff --git a/utils/log/log.go b/utils/log/log.go index a0e42b8f..be2a0c17 100644 --- a/utils/log/log.go +++ b/utils/log/log.go @@ -67,22 +67,27 @@ func SetLogLevel(logLevel string) { func Error(format string, v ...interface{}) { Log.Error(format, v...) + CallLogListeners("[Error] " + fmt.Sprintf(format, v...)) } func Warn(format string, v ...interface{}) { Log.Warn(format, v...) + CallLogListeners("[Warn] " + fmt.Sprintf(format, v...)) } func Info(format string, v ...interface{}) { Log.Info(format, v...) + CallLogListeners("[Info] " + fmt.Sprintf(format, v...)) } func Debug(format string, v ...interface{}) { Log.Debug(format, v...) + CallLogListeners("[Debug] " + fmt.Sprintf(format, v...)) } func Trace(format string, v ...interface{}) { Log.Trace(format, v...) + CallLogListeners("[Trace] " + fmt.Sprintf(format, v...)) } // Logger diff --git a/utils/log/log_extend.go b/utils/log/log_extend.go new file mode 100644 index 00000000..a2d77337 --- /dev/null +++ b/utils/log/log_extend.go @@ -0,0 +1,33 @@ +package log + +import ( + "sync" + "time" +) + +var logListeners = make([]LogListener, 0) +var lock sync.Mutex + +type LogListener interface { + Log(log string) + Location() string +} + +func AppendListener(l LogListener) { + lock.Lock() + logListeners = append(logListeners, l) + lock.Unlock() +} + +func CallLogListeners(log string) { + lock.Lock() + for _, l := range logListeners { + location, _ := time.LoadLocation(l.Location()) + if location == nil { + location = time.UTC + } + + l.Log(time.Now().In(location).Format("2006/01/02 15:04:05") + ": " + log) + } + lock.Unlock() +}