From 3acbffe5f410c334899da906a178be8e0e77e724 Mon Sep 17 00:00:00 2001 From: liangzy Date: Mon, 27 Apr 2020 21:26:13 +0800 Subject: [PATCH] =?UTF-8?q?v1.2.0=20=E6=95=B4=E4=B8=AAbeegolog=20=E6=89=93?= =?UTF-8?q?=E8=BF=9B=E5=8E=BB=EF=BC=8C=20=E5=A2=9E=E5=8A=A0syncmap?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=80=9A=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.go | 53 ++++++++++++++++++++++++ function.go | 1 - funtion.go | 47 +++++++++++++++++++++ go.mod | 9 ++++ go.sum | 46 +++++++++++++++++++++ log.go | 111 +++++++++++++------------------------------------- log_test.go | 7 +++- logs/es/es.go | 2 +- options.go | 20 +++++++++ 9 files changed, 210 insertions(+), 86 deletions(-) create mode 100644 config.go delete mode 100644 function.go create mode 100644 funtion.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 options.go diff --git a/config.go b/config.go new file mode 100644 index 0000000..906be7f --- /dev/null +++ b/config.go @@ -0,0 +1,53 @@ +package grlogs + +import ( + "bytes" + "encoding/json" +) + +type ConsoleLogConfig struct { + Level int `json:"level"` +} + +func (c *ConsoleLogConfig) String() string { + b, _ := json.Marshal(c) + return bytes.NewBuffer(b).String() +} + +type FileLogConfig struct { + Filename string `json:"filename"` + Level int `json:"level"` + Maxlines int `json:"maxlines"` + Daily bool `json:"daily"` + Maxdays int `json:"maxdays"` + Color bool `json:"color"` + Rotate bool `json:"rotate"` +} + +func (c *FileLogConfig) String() string { + b, _ := json.Marshal(c) + return bytes.NewBuffer(b).String() +} + +type ConnLogConfig struct { + ReconnectOnMsg bool `json:"reconnect_on_msg"` + Reconnect bool `json:"reconnect"` + Net string `json:"net"` + Addr string `json:"addr"` + Level int `json:"level"` +} + +func (c *ConnLogConfig) String() string { + b, _ := json.Marshal(c) + return bytes.NewBuffer(b).String() +} + +type EsConfig struct { + Dsn string `json:"dsn"` + Level int `json:"level"` +} + +func (c *EsConfig) String() string { + b, _ := json.Marshal(c) + return bytes.NewBuffer(b).String() +} diff --git a/function.go b/function.go deleted file mode 100644 index b488a2d..0000000 --- a/function.go +++ /dev/null @@ -1 +0,0 @@ -package grlogs diff --git a/funtion.go b/funtion.go new file mode 100644 index 0000000..e341273 --- /dev/null +++ b/funtion.go @@ -0,0 +1,47 @@ +package grlogs + +import ( + "fmt" + "github.com/astaxie/beego/logs" + "os" + "path" +) + +var adatperMapper = map[string]func(l *Logger, level int) error{ + + AdapterFile: func(l *Logger, level int) error { + if wd, err := os.Getwd(); err == nil { + c := FileLogConfig{ + Filename: path.Join(wd, fmt.Sprintf("runtime/logs/%s.log", l.Lable)), + Level: level, + Maxlines: 0, + Daily: true, + Maxdays: 7, + Color: true, + Rotate: true, + } + return l.SetLogger(logs.AdapterFile, c.String()) + } else { + return err + } + }, + + AdapterConsole: func(l *Logger, level int) error { + c := ConsoleLogConfig{Level: level} + return l.SetLogger(logs.AdapterConsole, c.String()) + }, + + AdapterElasticSearch: func(l *Logger, level int) error { + + dsn := "http://es-cn-0pp1mm3hq000dnbh4.public.elasticsearch.aliyuncs.com:9200/" + if envkey == "prod" || envkey == "" { + dsn = "http://es-cn-0pp1mm3hq000dnbh4.public.elasticsearch.aliyuncs.com:9200/" + } + + c := EsConfig{ + Dsn: dsn, + Level: level, + } + return l.SetLogger(logs.AdapterEs, c.String()) + }, +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..cc284be --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module golib.gaore.com/GaoreGo/grlogs + +go 1.13 + +require ( + github.com/OwnLocal/goes v1.0.0 + github.com/astaxie/beego v1.12.1 + github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..cf804ab --- /dev/null +++ b/go.sum @@ -0,0 +1,46 @@ +github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/OwnLocal/goes v1.0.0 h1:81QQ3z6dvLhgXlkNpLkaYhk8jiKS7saFG01xy039KaU= +github.com/OwnLocal/goes v1.0.0/go.mod h1:8rIFjBGTue3lCU0wplczcUgt9Gxgrkkrw7etMIcn8TM= +github.com/astaxie/beego v1.12.1 h1:dfpuoxpzLVgclveAXe4PyNKqkzgm5zF4tgF2B3kkM2I= +github.com/astaxie/beego v1.12.1/go.mod h1:kPBWpSANNbSdIqOc8SUL9h+1oyBMZhROeYsXQDbidWQ= +github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= +github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= +github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= +github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE= +github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= +github.com/couchbase/go-couchbase v0.0.0-20181122212707-3e9b6e1258bb/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U= +github.com/couchbase/gomemcached v0.0.0-20181122193126-5125a94a666c/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c= +github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs= +github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY= +github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo= +github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= +github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= +github.com/siddontang/ledisdb v0.0.0-20181029004158-becf5f38d373/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= +github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA= +github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= +github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= +github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20200117065230-39095c1d176c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/log.go b/log.go index d2070a8..0d9e999 100644 --- a/log.go +++ b/log.go @@ -1,105 +1,52 @@ package grlogs import ( - "bytes" - "encoding/json" "fmt" "golib.gaore.com/GaoreGo/grlogs/logs" "os" - "path" "sync" ) -const ( - _ = iota - LEVEL_NONE = iota - LEVEL_CRITICAL = iota - LEVEL_ERROR = iota - LEVEL_WARNING = iota - LEVEL_WARN = iota - LEVEL_INFO = iota - LEVEL_DEBUG = iota - LEVEL_ALL = iota -) - -type ConsoleLogConfig struct { - Level int `json:"level"` -} - -type FileLogConfig struct { - Filename string `json:"filename"` - Level int `json:"level"` - Maxlines int `json:"maxlines"` - Daily bool `json:"daily"` - Maxdays int `json:"maxdays"` - Color bool `json:"color"` - Rotate bool `json:"rotate"` -} - -type ConnLogConfig struct { - ReconnectOnMsg bool `json:"reconnect_on_msg"` - Reconnect bool `json:"reconnect"` - Net string `json:"net"` - Addr string `json:"addr"` - Level int `json:"level"` -} - var loggers = sync.Map{} +var envkey = "CENTER_RUNMODE" + type Logger struct { + Lable string *logs.BeeLogger } -func (l *Logger) Write(p []byte) (n int, err error) { - l.Debug(bytes.NewBuffer(p).String()) - return +func (self *Logger) SetAdapter(level int, adapter string) *Logger { + if call, ok := adatperMapper[adapter]; ok { + if err := call(self, level); err != nil { + fmt.Println(err) + } + } + return self } -func (l *Logger) SetFormat() { +func New(label string, channelLens ...int64) (l *Logger) { + var channellens int64 + s, ok := loggers.LoadOrStore(label, new(Logger)) + l = s.(*Logger) -} + if len(channelLens) > 0 { + channellens = channelLens[0] + } -func (l *Logger) Stop() { - l.BeeLogger.Close() + if !ok { + l.Lable = label + l.BeeLogger = logs.NewLogger(channellens) + l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label)) + } + return } -func GetLogger(name string) *Logger { - - if l, ok := loggers.Load(name); ok { - return l.(*Logger) - } else { - var level int = LEVEL_WARN - - if s := os.Getenv("CENTER_RUNMODE"); s == "dev" { - level = LEVEL_ALL - } - - wd, _ := os.Getwd() - - conf1 := FileLogConfig{ - Filename: path.Join(wd, fmt.Sprintf("runtime/logs/%s.log", name)), - Level: LEVEL_ALL, - Maxlines: 0, - Daily: true, - Maxdays: 7, - Color: true, - Rotate: true, - } - - conf2 := ConsoleLogConfig{ - Level: level, - } - - confString, _ := json.Marshal(&conf1) - confString2, _ := json.Marshal(&conf2) - l := new(Logger) - l.BeeLogger = logs.NewLogger(1000) - l.SetLogger(logs.AdapterFile, bytes.NewBuffer(confString).String()) - l.SetLogger(logs.AdapterConsole, bytes.NewBuffer(confString2).String()) - l.BeeLogger.SetPrefix("_" + name) - l.BeeLogger.EnableFuncCallDepth(true) - l.BeeLogger.SetLogFuncCallDepth(2) - loggers.Store(name, l) - return l +func Get(label string, channelLens ...int64) (l *Logger) { + var filelevel int = LevelWarning + if os.Getenv(envkey) == "dev" { + filelevel = LevelAll } + l = New(label, channelLens...).SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole) + return } diff --git a/log_test.go b/log_test.go index 242637e..949303a 100644 --- a/log_test.go +++ b/log_test.go @@ -1,12 +1,15 @@ package grlogs import ( + _ "golib.gaore.com/GaoreGo/grlogs/logs/es" "testing" + "time" ) func TestGetLogger(t *testing.T) { - l := GetLogger("nds") + l := Get("nds", 128).SetAdapter(LevelNone, AdapterElasticSearch) l.Debug("我正在调试") l.Critical("出错了") - GetLogger("wifi").Critical("hello wifi") + Get("nds").Warning("hadoee %s", time.Now().Format(time.RFC1123)) + l.Flush() } diff --git a/logs/es/es.go b/logs/es/es.go index a76e56f..863244d 100644 --- a/logs/es/es.go +++ b/logs/es/es.go @@ -9,7 +9,7 @@ import ( "time" "github.com/OwnLocal/goes" - "github.com/astaxie/beego/logs" + "golib.gaore.com/GaoreGo/grlogs/logs" ) // NewES return a LoggerInterface diff --git a/options.go b/options.go new file mode 100644 index 0000000..0140e58 --- /dev/null +++ b/options.go @@ -0,0 +1,20 @@ +package grlogs + +const ( + _ = iota + LevelNone = iota + LevelCritical = iota + LevelError = iota + LevelWarning = iota + LevelWarn = iota + LevelInfo = iota + LevelDebug = iota + LevelAll = iota +) + +const ( + AdapterFile = "file" + AdapterConsole = "console" + AdapterSocket = "socket" + AdapterElasticSearch = "es" +)