]> 127.0.0.1 Git - part/.git/commitdiff
97
authorqydysky <qydysky@foxmail.com>
Thu, 24 Dec 2020 16:42:33 +0000 (00:42 +0800)
committerqydysky <qydysky@foxmail.com>
Thu, 24 Dec 2020 16:42:33 +0000 (00:42 +0800)
log/Log.go [new file with mode: 0644]
log/Log_test.go [new file with mode: 0644]

diff --git a/log/Log.go b/log/Log.go
new file mode 100644 (file)
index 0000000..e56ccf6
--- /dev/null
@@ -0,0 +1,183 @@
+package part
+
+import (
+       "io"
+       "time"
+       "os"
+    "log"
+
+    p "github.com/qydysky/part"
+    m "github.com/qydysky/part/msgq"
+)
+
+type Log_interface struct {
+    MQ *m.Msgq
+    Config
+}
+
+type Config struct {
+    File_string string
+    Level_string [4]string
+    Base_string []interface{}
+}
+
+type msg_item struct {
+    Show_obj []io.Writer
+    Msg_obj []interface{}
+}
+
+//New 初始化
+func New(c Config) (o *Log_interface) {
+
+    o = new(Log_interface)
+    
+    //设置log等级字符串
+    for k,v := range c.Level_string {
+        if v == `` {continue}
+        o.Level_string[k] = v
+    } 
+
+    o.MQ = m.New(10)
+
+    o.MQ.Pull_tag(map[string]func(interface{})(bool){
+        `block`:func(data interface{})(bool){
+            if v,ok := data.(chan struct{});ok{close(v)}
+            return false
+        },
+        `T`:func(data interface{})(bool){
+            log.New(io.MultiWriter(data.(msg_item).Show_obj...),
+            o.Level_string[0] + ": ",
+            log.Ldate|log.Ltime).Println(data.(msg_item).Msg_obj...)
+            return false
+        },
+        `I`:func(data interface{})(bool){
+            log.New(io.MultiWriter(data.(msg_item).Show_obj...),
+            o.Level_string[1] + ": ",
+            log.Ldate|log.Ltime).Println(data.(msg_item).Msg_obj...)
+            return false
+        },
+        `W`:func(data interface{})(bool){
+            log.New(io.MultiWriter(data.(msg_item).Show_obj...),
+            o.Level_string[2] + ": ",
+            log.Ldate|log.Ltime).Println(data.(msg_item).Msg_obj...)
+            return false
+        },
+        `E`:func(data interface{})(bool){
+            log.New(io.MultiWriter(data.(msg_item).Show_obj...),
+            o.Level_string[3] + ": ",
+            log.Ldate|log.Ltime).Println(data.(msg_item).Msg_obj...)
+            return false
+        },
+    })
+    return
+}
+
+//
+func copy(i *Log_interface)(o *Log_interface){
+    t := *i
+    o = &t
+    return
+}
+
+//Level 设置之后日志等级
+func (I *Log_interface) Level(l int) (O *Log_interface) {
+    O = copy(I)
+    for k,_ := range O.Level_string {
+        if k < l {O.Level_string[k] = ``}
+    }
+    return
+}
+
+
+//Open 日志输出至文件
+func (I *Log_interface) Log_to_file(fileP string) (O *Log_interface) {
+    O=I
+    O.File_string = fileP
+    p.File().NewPath(fileP)
+    return
+}
+
+//Block 阻塞直到本轮日志输出完毕
+func (I *Log_interface) Block(timeout int) (O *Log_interface) {
+    O=I
+    b := make(chan struct{})
+    O.MQ.Push_tag(`block`,b)
+    select {
+    case <-b:
+    case <-time.After(time.Duration(timeout)*time.Millisecond):
+    }
+    return
+}
+
+//日志等级
+//Base 追加到后续输出
+func (I *Log_interface) Base(i ...interface{}) (O *Log_interface) {
+    O=copy(I)
+    O.Base_string = i
+    return
+}
+func (I *Log_interface) Base_add(i ...interface{}) (O *Log_interface) {
+    O=copy(I)
+    O.Base_string = append(O.Base_string, i...)
+    return
+}
+func (I *Log_interface) T(i ...interface{}) (O *Log_interface) {
+    O=I
+    if O.Level_string[0] == `` {return}
+    var showObj = []io.Writer{os.Stdout}
+
+    if O.File_string != `` {
+        file, err := os.OpenFile(O.File_string, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+        if err != nil {O.E("Failed to open log file:", err)}else{showObj = append(showObj, file)}
+    }
+    O.MQ.Push_tag(`T`,msg_item{
+        Show_obj:showObj,
+        Msg_obj:append(O.Base_string, i),
+    })
+    return
+}
+func (I *Log_interface) I(i ...interface{}) (O *Log_interface) {
+    O=I
+    if O.Level_string[1] == `` {return}
+    var showObj = []io.Writer{os.Stdout}
+
+    if O.File_string != `` {
+        file, err := os.OpenFile(O.File_string, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+        if err != nil {O.E("Failed to open log file:", err)}else{showObj = append(showObj, file)}
+    }
+    O.MQ.Push_tag(`I`,msg_item{
+        Show_obj:showObj,
+        Msg_obj:append(O.Base_string, i),
+    })
+    return
+}
+func (I *Log_interface) W(i ...interface{}) (O *Log_interface) {
+    O=I
+    if O.Level_string[2] == `` {return}
+    var showObj = []io.Writer{os.Stdout}
+
+    if O.File_string != `` {
+        file, err := os.OpenFile(O.File_string, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+        if err != nil {O.E("Failed to open log file:", err)}else{showObj = append(showObj, file)}
+    }
+    O.MQ.Push_tag(`W`,msg_item{
+        Show_obj:showObj,
+        Msg_obj:append(O.Base_string, i),
+    })
+    return
+}
+func (I *Log_interface) E(i ...interface{}) (O *Log_interface) {
+    O=I
+    if O.Level_string[3] == `` {return}
+    var showObj = []io.Writer{os.Stdout}
+
+    if O.File_string != `` {
+        file, err := os.OpenFile(O.File_string, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+        if err != nil {O.E("Failed to open log file:", err)}else{showObj = append(showObj, file)}
+    }
+    O.MQ.Push_tag(`E`,msg_item{
+        Show_obj:showObj,
+        Msg_obj:append(O.Base_string, i),
+    })
+    return
+}
\ No newline at end of file
diff --git a/log/Log_test.go b/log/Log_test.go
new file mode 100644 (file)
index 0000000..e947ef9
--- /dev/null
@@ -0,0 +1,31 @@
+package part
+
+import (
+       "time"
+       "testing"
+)
+
+type test_item struct {
+       data string
+}
+
+func Test_1(t *testing.T) {
+    n := New(Config{
+        Level_string:[4]string{`T`,`I`,`W`,`E`},
+    })
+    time.Sleep(time.Second)
+
+    n.Log_to_file(`1.log`).T(`s`).I("11").W(`12`).E(`a`)
+
+    {
+        n1 := n.Base(`>1`)
+        n1.T(`s`).I("11")
+        {
+            n2 := n1.Base_add(`>2`)
+            n2.W(`12`).E(`a`)
+        }
+    }
+
+    n.Level(2).T(`s`).I("11").W(`12`).E(`a`)
+    n.Block(1000)
+}
\ No newline at end of file