forked from x/icebergs
93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
package log
|
|
|
|
import (
|
|
"github.com/shylinux/icebergs"
|
|
"github.com/shylinux/toolkits"
|
|
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
type Log struct {
|
|
m *ice.Message
|
|
level string
|
|
str string
|
|
}
|
|
|
|
type Frame struct {
|
|
p chan *Log
|
|
}
|
|
|
|
func (f *Frame) Spawn(m *ice.Message, c *ice.Context, arg ...string) ice.Server {
|
|
return &Frame{}
|
|
}
|
|
func (f *Frame) Begin(m *ice.Message, arg ...string) ice.Server {
|
|
f.p = make(chan *Log, 100)
|
|
ice.Log = func(msg *ice.Message, level string, str string) {
|
|
f.p <- &Log{m: msg, level: level, str: str}
|
|
}
|
|
return f
|
|
}
|
|
func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|
for {
|
|
if l, ok := <-f.p; !ok {
|
|
break
|
|
} else {
|
|
file := kit.Select("bench", m.Conf("show", l.level+".file"))
|
|
f := m.Confv("file", file+".file").(*os.File)
|
|
|
|
ls := []string{l.m.Format("prefix"), " "}
|
|
ls = append(ls, m.Conf("show", l.level+".prefix"),
|
|
l.level, " ", l.str, m.Conf("show", l.level+".suffix"), "\n")
|
|
|
|
for _, v := range ls {
|
|
fmt.Fprintf(f, v)
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
func (f *Frame) Close(m *ice.Message, arg ...string) bool {
|
|
return true
|
|
}
|
|
|
|
var Index = &ice.Context{Name: "log", Help: "日志模块",
|
|
Caches: map[string]*ice.Cache{},
|
|
Configs: map[string]*ice.Config{
|
|
"file": &ice.Config{Name: "file", Value: map[string]interface{}{
|
|
"bench": map[string]interface{}{"path": "var/log/bench.log"},
|
|
}, Help: "信号"},
|
|
"show": &ice.Config{Name: "file", Value: map[string]interface{}{
|
|
"bench": map[string]interface{}{"file": "bench"},
|
|
|
|
"cmd": map[string]interface{}{"file": "bench", "prefix": "\033[32m", "suffix": "\033[0m"},
|
|
"start": map[string]interface{}{"file": "bench", "prefix": "\033[32m", "suffix": "\033[0m"},
|
|
"serve": map[string]interface{}{"file": "bench", "prefix": "\033[32m", "suffix": "\033[0m"},
|
|
|
|
"cost": map[string]interface{}{"file": "bench", "prefix": "\033[33m", "suffix": "\033[0m"},
|
|
|
|
"warn": map[string]interface{}{"file": "bench", "prefix": "\033[31m", "suffix": "\033[0m"},
|
|
"close": map[string]interface{}{"file": "bench", "prefix": "\033[31m", "suffix": "\033[0m"},
|
|
}, Help: "信号"},
|
|
},
|
|
Commands: map[string]*ice.Command{
|
|
"_init": {Name: "_init", Help: "hello", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
m.Confm("file", nil, func(key string, value map[string]interface{}) {
|
|
if f, p, e := kit.Create(kit.Format(value["path"])); m.Assert(e) {
|
|
m.Cap("stream", path.Base(p))
|
|
m.Log("info", "log %s %s", key, p)
|
|
value["file"] = f
|
|
}
|
|
})
|
|
}},
|
|
"_exit": {Name: "_exit", Help: "hello", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
f := m.Target().Server().(*Frame)
|
|
ice.Log = nil
|
|
close(f.p)
|
|
}},
|
|
},
|
|
}
|
|
|
|
func init() { ice.Index.Register(Index, &Frame{}) }
|