Compare commits

..

No commits in common. "master" and "v1.3.2" have entirely different histories.

8 changed files with 99 additions and 181 deletions

View File

@ -45,17 +45,25 @@ var adatperSetMapper = map[Adapter]func(l *Logger, level Level) error{
}, },
AdapterElasticSearch: func(l *Logger, level Level) error { AdapterElasticSearch: func(l *Logger, level Level) error {
c := GenEsConfig(level)
dsn := "http://es-cn-0pp1mm3hq000dnbh4.public.elasticsearch.aliyuncs.com:9200/"
if os.Getenv(envkey) == "prod" || os.Getenv(envkey) == "" || os.Getenv(envkey) == "gray" {
dsn = "http://es-cn-0pp1mm3hq000dnbh4.elasticsearch.aliyuncs.com:9200/"
}
c := EsConfig{
Username: "elastic",
Password: "Hellogaore@",
Dsn: dsn,
Level: level,
Index: os.Getenv("GRLOG_APP_NAME"),
}
return l.SetLogger(logs.AdapterEs, c.String()) return l.SetLogger(logs.AdapterEs, c.String())
}, },
AdapterAliLs: func(l *Logger, level Level) error { AdapterAliLs: func(l *Logger, level Level) error {
c := GenAliConfig(level)
return l.SetLogger(logs.AdapterAliLS, c.String())
},
}
func GenAliConfig(level Level) *AliLSConfig {
var project string = "gaore-app-logstore" var project string = "gaore-app-logstore"
var endpoint string var endpoint string
@ -65,7 +73,7 @@ func GenAliConfig(level Level) *AliLSConfig {
endpoint = project + ".cn-shenzhen.log.aliyuncs.com" endpoint = project + ".cn-shenzhen.log.aliyuncs.com"
} }
c := &AliLSConfig{ c := AliLSConfig{
Project: project, Project: project,
Endpoint: endpoint, Endpoint: endpoint,
KeyID: "LTAI4GCHwcqtrFD4DHRHxR4k", KeyID: "LTAI4GCHwcqtrFD4DHRHxR4k",
@ -76,23 +84,9 @@ func GenAliConfig(level Level) *AliLSConfig {
Level: level, Level: level,
FlushWhen: 0, FlushWhen: 0,
} }
return c
}
func GenEsConfig(level Level) *EsConfig { return l.SetLogger(logs.AdapterAliLS, c.String())
dsn := "http://es-cn-tl32xlfmu00015h34.public.elasticsearch.aliyuncs.com:9200/" },
if os.Getenv(envkey) == "prod" || os.Getenv(envkey) == "" || os.Getenv(envkey) == "gray" {
dsn = "http://es-cn-tl32xlfmu00015h34.elasticsearch.aliyuncs.com:9200/"
}
c := &EsConfig{
Username: "kaifa_api",
Password: "2quYX3bTeahO",
Dsn: dsn,
Level: level,
Index: os.Getenv("GRLOG_APP_NAME"),
}
return c
} }
var adatperDropMapper = map[Adapter]func(l *Logger) error{ var adatperDropMapper = map[Adapter]func(l *Logger) error{

97
log.go
View File

@ -11,19 +11,11 @@ var loggers = sync.Map{}
var envkey = "CENTER_RUNMODE" var envkey = "CENTER_RUNMODE"
var defaultModeMapping = map[string][]AdapterTupple{
"es": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterElasticSearch}},
"ali": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterAliLs}},
"": []AdapterTupple{{LevelAll, AdapterConsole}, {LevelAll, AdapterFile}},
}
type Logger struct { type Logger struct {
Lable string Lable string
*logs.BeeLogger *logs.BeeLogger
} }
type Getter func() *Logger
func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger { func (self *Logger) SetAdapter(level Level, adapter Adapter) *Logger {
if call, ok := adatperSetMapper[adapter]; ok { if call, ok := adatperSetMapper[adapter]; ok {
if err := call(self, level); err != nil { if err := call(self, level); err != nil {
@ -42,61 +34,65 @@ func (self *Logger) DropAdapter(adapter Adapter) *Logger {
return self return self
} }
func newLoggerFromMap(label string, defaultmode string, channelLens ...int64) Getter { func New(label string, channelLens ...int64) (l *Logger, loaded bool) {
var channellens int64
var tmp interface{}
if tmp, ok := loggers.Load(label); ok { tmp, loaded = loggers.LoadOrStore(label, new(Logger))
return tmp.(Getter) l = tmp.(*Logger)
if len(channelLens) > 0 {
channellens = channelLens[0]
} }
var l *Logger if !loaded {
var once sync.Once
wapperGetter := Getter(func() *Logger {
once.Do(func() {
var channelLensNum int64 = 100
if len(channelLens) > 0 && channelLens[0] > 0 {
channelLensNum = channelLens[0]
}
l = &Logger{BeeLogger: logs.NewLogger(channelLensNum)}
l.Lable = label l.Lable = label
l.BeeLogger = logs.NewLogger(channelLensNum) l.BeeLogger = logs.NewLogger(channellens)
l.BeeLogger.Lable = label l.BeeLogger.Lable = label
l.Env = os.Getenv(envkey) l.Env = os.Getenv(envkey)
l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label)) l.SetPrefix(fmt.Sprintf("[env:%s logger:%s]", os.Getenv(envkey), label))
l.EnableFuncCallDepth(true) l.EnableFuncCallDepth(true)
l.SetLogFuncCallDepth(2) l.SetLogFuncCallDepth(2)
if mode, ok := defaultModeMapping[defaultmode]; ok {
for _, v := range mode {
l.SetAdapter(v.Level, v.Adapter)
} }
} return
})
return l
})
tmp, loaded := loggers.LoadOrStore(label, wapperGetter)
if loaded {
return tmp.(Getter)
} }
return wapperGetter func Get(label string, channelLens ...int64) (l *Logger) {
var filelevel Level = LevelInfo
var loaded bool
if os.Getenv(envkey) == "dev" {
filelevel = LevelAll
} }
func Get(label string, channelLens ...int64) *Logger { if l, loaded = New(label, channelLens...); !loaded {
getter := newLoggerFromMap(label, "", channelLens...) l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole)
return getter() }
return
} }
func GetEs(label string, channelLens ...int64) *Logger { func GetEs(label string, channelLens ...int64) (l *Logger) {
getter := newLoggerFromMap(label, "es", channelLens...) var filelevel Level = LevelInfo
return getter() var loaded bool
if os.Getenv(envkey) == "dev" {
filelevel = LevelAll
} }
func GetAli(label string, channelLens ...int64) *Logger { if l, loaded = New(label, channelLens...); !loaded {
getter := newLoggerFromMap(label, "ali", channelLens...) l.SetAdapter(filelevel, AdapterFile).SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterElasticSearch)
return getter() }
return
}
func GetAli(label string, channelLens ...int64) (l *Logger) {
var filelevel Level = LevelInfo
var loaded bool
if os.Getenv(envkey) == "dev" {
filelevel = LevelAll
}
if l, loaded = New(label, channelLens...); !loaded {
l.SetAdapter(LevelAll, AdapterConsole).SetAdapter(filelevel, AdapterFile).SetAdapter(filelevel, AdapterAliLs)
}
return
} }
func Close(lables ...string) { func Close(lables ...string) {
@ -132,14 +128,3 @@ func CloseAll() {
}) })
wg.Wait() wg.Wait()
} }
func init() {
var level Level = LevelInfo
if os.Getenv(envkey) == "dev" {
level = LevelAll
}
defaultModeMapping["es"] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterElasticSearch}}
defaultModeMapping["ali"] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterAliLs}}
defaultModeMapping[""] = []AdapterTupple{{level, AdapterConsole}, {level, AdapterFile}}
}

View File

@ -4,7 +4,6 @@ import (
"errors" "errors"
_ "golib.gaore.com/GaoreGo/grlogs/logs/alils" _ "golib.gaore.com/GaoreGo/grlogs/logs/alils"
_ "golib.gaore.com/GaoreGo/grlogs/logs/es" _ "golib.gaore.com/GaoreGo/grlogs/logs/es"
"sync"
"testing" "testing"
"time" "time"
) )
@ -49,7 +48,7 @@ func TestGetAliLs(t *testing.T) {
l.Warn("Warn") l.Warn("Warn")
} }
time.Sleep(time.Hour * 1) Close(lable, lable, lable)
} }
func TestDropAdapter(t *testing.T) { func TestDropAdapter(t *testing.T) {
@ -60,39 +59,3 @@ func TestDropAdapter(t *testing.T) {
Debug(errors.New("he hello")) Debug(errors.New("he hello"))
CloseAll() CloseAll()
} }
func TestNew(t *testing.T) {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
GetAli("ok").Debug("%d", i)
time.Sleep(time.Second * 10)
wg.Done()
}(i)
}
for i := 0; i < 10; i++ {
GetAli("ok").Debug("aaaaaa%d", i)
}
wg.Wait()
}
func TestGetEs(t *testing.T) {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
GetEs("ok").Debug("%d", i)
time.Sleep(time.Second * 10)
wg.Done()
}(i)
}
for i := 0; i < 10; i++ {
GetEs("ok").Debug("aaaaaa%d", i)
}
wg.Wait()
}

View File

@ -5,8 +5,6 @@ import (
"fmt" "fmt"
"github.com/aliyun/aliyun-log-go-sdk/producer" "github.com/aliyun/aliyun-log-go-sdk/producer"
"golib.gaore.com/GaoreGo/grlogs/logs" "golib.gaore.com/GaoreGo/grlogs/logs"
"os"
"runtime"
"time" "time"
) )
@ -29,7 +27,6 @@ type alilsLogger struct {
Source string `json:"source"` Source string `json:"source"`
Level int `json:"level"` Level int `json:"level"`
FlushWhen int `json:"flush_when"` FlushWhen int `json:"flush_when"`
Debug bool
} }
func (a *alilsLogger) Init(jsonconfig string) error { func (a *alilsLogger) Init(jsonconfig string) error {
@ -43,14 +40,11 @@ func (a *alilsLogger) Init(jsonconfig string) error {
producerConfig.AccessKeyID = a.KeyID producerConfig.AccessKeyID = a.KeyID
producerConfig.AccessKeySecret = a.KeySecret producerConfig.AccessKeySecret = a.KeySecret
producerConfig.LingerMs = 100 producerConfig.LingerMs = 100
producerConfig.NoRetryStatusCodeList = []int{-1}
producerConfig.Retries = 2
producerConfig.AllowLogLevel = "error" producerConfig.AllowLogLevel = "error"
producerConfig.MaxIoWorkerCount = int64(runtime.NumCPU())
a.producer = producer.InitProducer(producerConfig) a.producer = producer.InitProducer(producerConfig)
a.callback = &Callback{} a.callback = &Callback{}
a.producer.Start() a.producer.Start()
a.Debug = os.Getenv("GRLOG_ALILS_DEBUG") == "on"
return nil return nil
} }
@ -68,19 +62,12 @@ func (a *alilsLogger) WriteMsg(when time.Time, msg string, level int, lable stri
log := producer.GenerateLog(uint32(when.Unix()), vals) log := producer.GenerateLog(uint32(when.Unix()), vals)
if a.Debug {
for _, topic := range a.Topics {
if err := a.producer.SendLogWithCallBack(a.Project, a.LogStore, topic, a.Source, log, a.callback); err != nil {
return err
}
}
} else {
for _, topic := range a.Topics { for _, topic := range a.Topics {
if err := a.producer.SendLog(a.Project, a.LogStore, topic, a.Source, log); err != nil { if err := a.producer.SendLog(a.Project, a.LogStore, topic, a.Source, log); err != nil {
return err return err
} }
} }
}
return nil return nil
} }

View File

@ -11,15 +11,15 @@ type Callback struct {
func (callback *Callback) Success(result *producer.Result) { func (callback *Callback) Success(result *producer.Result) {
attemptList := result.GetReservedAttempts() attemptList := result.GetReservedAttempts()
for _, attempt := range attemptList { for _, attempt := range attemptList {
fmt.Printf("alilog %+v \n", attempt) fmt.Printf("%+v \n", attempt)
} }
} }
func (callback *Callback) Fail(result *producer.Result) { func (callback *Callback) Fail(result *producer.Result) {
fmt.Println("IsSuccessful", result.IsSuccessful()) fmt.Println(result.IsSuccessful())
fmt.Println("GetErrorCode", result.GetErrorCode()) fmt.Println(result.GetErrorCode())
fmt.Println("GetErrorMessage", result.GetErrorMessage()) fmt.Println(result.GetErrorMessage())
fmt.Println("GetReservedAttempts", result.GetReservedAttempts()) fmt.Println(result.GetReservedAttempts())
fmt.Println("GetRequestId", result.GetRequestId()) fmt.Println(result.GetRequestId())
fmt.Println("GetTimeStampMs", result.GetTimeStampMs()) fmt.Println(result.GetTimeStampMs())
} }

View File

@ -89,7 +89,7 @@ func (el *esLogger) WriteMsg(when time.Time, msg string, level int, lable string
d := goes.Document{ d := goes.Document{
Index: fmt.Sprintf("%s-%04d.%02d.%02d", el.IndexName, when.Year(), when.Month(), when.Day()), Index: fmt.Sprintf("%s-%04d.%02d.%02d", el.IndexName, when.Year(), when.Month(), when.Day()),
Type: "_doc", Type: "logs",
Fields: vals, Fields: vals,
} }
_, err := el.Index(d, nil) _, err := el.Index(d, nil)

View File

@ -281,7 +281,7 @@ func testFileRotate(t *testing.T, fn1, fn2 string, daily, hourly bool) {
fw.hourlyOpenDate = fw.hourlyOpenTime.Day() fw.hourlyOpenDate = fw.hourlyOpenTime.Day()
} }
fw.WriteMsg(time.Now(), "this is a msg for test", LevelDebug, "", "dev") fw.WriteMsg(time.Now(), "this is a msg for test", LevelDebug)
for _, file := range []string{fn1, fn2} { for _, file := range []string{fn1, fn2} {
_, err := os.Stat(file) _, err := os.Stat(file)

View File

@ -4,11 +4,6 @@ type Level int
type Adapter string type Adapter string
type AdapterTupple struct {
Level Level
Adapter Adapter
}
const ( const (
_ Level = iota _ Level = iota
LevelNone Level = iota LevelNone Level = iota
@ -28,9 +23,3 @@ const (
AdapterElasticSearch Adapter = "es" AdapterElasticSearch Adapter = "es"
AdapterAliLs Adapter = "alils" AdapterAliLs Adapter = "alils"
) )
const (
DEV = "dev"
GRAY = "gray"
PROD = "prod"
)