package grlogs import ( "fmt" "github.com/astaxie/beego/logs" "os" "path" "strings" ) var adatperSetMapper = map[Adapter]func(l *Logger, level Level) error{ AdapterSocket: func(l *Logger, level Level) error { c := ConnLogConfig{ ReconnectOnMsg: false, Reconnect: true, Net: "", Addr: "127.0.0.1:9888", Level: level, } return l.SetLogger(logs.AdapterConn, c.String()) }, AdapterFile: func(l *Logger, level Level) 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 Level) error { c := ConsoleLogConfig{Level: level} return l.SetLogger(logs.AdapterConsole, c.String()) }, AdapterElasticSearch: func(l *Logger, level Level) error { c := GenEsConfig(level) return l.SetLogger(logs.AdapterEs, c.String()) }, 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 endpoint string if os.Getenv(envkey) == "prod" || os.Getenv(envkey) == "" || os.Getenv(envkey) == "gray" { endpoint = project + ".cn-shenzhen-intranet.log.aliyuncs.com" } else if os.Getenv(envkey) == "dev" { endpoint = project + ".cn-shenzhen.log.aliyuncs.com" } c := &AliLSConfig{ Project: project, Endpoint: endpoint, KeyID: "LTAI4GCHwcqtrFD4DHRHxR4k", KeySecret: "Ln19xfVYy6OMlJeF9aBvFl4fhRUKBl", LogStore: "gaore-app-logstore", Topics: []string{os.Getenv("GRLOG_APP_NAME")}, Source: "", Level: level, FlushWhen: 0, } return c } func GenEsConfig(level Level) *EsConfig { 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: "elastic", Password: "f0zCXxh6", Dsn: dsn, Level: level, Index: os.Getenv("GRLOG_APP_NAME"), } return c } var adatperDropMapper = map[Adapter]func(l *Logger) error{ AdapterAliLs: func(l *Logger) error { return l.BeeLogger.DelLogger(logs.AdapterAliLS) }, AdapterFile: func(l *Logger) error { return l.BeeLogger.DelLogger(logs.AdapterFile) }, AdapterConsole: func(l *Logger) error { return l.BeeLogger.DelLogger(logs.AdapterConsole) }, AdapterElasticSearch: func(l *Logger) error { return l.BeeLogger.DelLogger(logs.AdapterEs) }, } func formatLog(f interface{}, v ...interface{}) string { var msg string switch f.(type) { case string: msg = f.(string) if len(v) == 0 { return msg } if strings.Contains(msg, "%") && !strings.Contains(msg, "%%") { //format string } else { //do not contain format char msg += strings.Repeat(" %v", len(v)) } default: msg = fmt.Sprint(f) if len(v) == 0 { return msg } msg += strings.Repeat(" %v", len(v)) } return fmt.Sprintf(msg, v...) }