Add log util for msb to istio agent 31/56431/1
authorLvbo163 <lv.bo163@zte.com.cn>
Sat, 14 Jul 2018 06:58:55 +0000 (14:58 +0800)
committerLvbo163 <lv.bo163@zte.com.cn>
Sat, 14 Jul 2018 06:59:32 +0000 (14:59 +0800)
Issue-ID: MSB-213

Change-Id: I3ed127a72415fe69402775603610a5788c7087ed
Signed-off-by: Lvbo163 <lv.bo163@zte.com.cn>
msb2pilot2/conf/log.yml [new file with mode: 0644]
msb2pilot2/log/log.go [new file with mode: 0644]
msb2pilot2/main.go

diff --git a/msb2pilot2/conf/log.yml b/msb2pilot2/conf/log.yml
new file mode 100644 (file)
index 0000000..780df1a
--- /dev/null
@@ -0,0 +1,13 @@
+# level: Emergency, Alert, Critical, Error, Warn, Notice, Info and Debug
+console:
+  level: Debug
+
+file:
+  filename: msb2pilot.log
+  level: Info
+  maxlines: 300000
+  #metric:M
+  maxsize: 20
+  daily: false
+  maxdays: 3
+  rotate: true
diff --git a/msb2pilot2/log/log.go b/msb2pilot2/log/log.go
new file mode 100644 (file)
index 0000000..253d8b2
--- /dev/null
@@ -0,0 +1,179 @@
+package log
+
+import (
+       "encoding/json"
+       "fmt"
+       "github.com/astaxie/beego/logs"
+       "msb2pilot/util"
+       "os"
+       "path/filepath"
+       "strconv"
+       "strings"
+)
+
+type ConsoleCfg struct {
+       Level int `json:"level"`
+}
+
+type FileCfg struct {
+       FileName string `json:"filename"`
+       Level    int    `json:"level"`
+       MaxLines int    `json:"maxlines"`
+       MaxSize  int    `josn:"maxsize"`
+       Daily    bool   `json:"daily"`
+       MaxDays  int    `json:"maxdays"`
+       Rotate   bool   `json:"rotate"`
+}
+
+type Cfg struct {
+       Console ConsoleCfg `json:"console"`
+       File    FileCfg    `json:"file"`
+}
+
+const (
+       cfgFileName         = "log.yml"
+       defaultConsoleLevel = "Warn"
+       defaultFileLevel    = "Info"
+)
+
+var (
+       Log         *logs.BeeLogger
+       loggerLevel = map[string]int{"Emergency": 0, "Alert": 1, "Critical": 2, "Error": 3, "Warn": 4, "Notice": 5, "Info": 6, "Debug": 7}
+)
+
+func init() {
+       Log = logs.NewLogger()
+       Log.EnableFuncCallDepth(true)
+
+       cfg := getConfig()
+       setLogger(logs.AdapterConsole, &cfg.Console)
+       checkLogDir(cfg.File.FileName)
+       setLogger(logs.AdapterFile, &cfg.File)
+}
+
+func setLogger(adapter string, cfg interface{}) bool {
+       b, err := json.Marshal(cfg)
+       if err != nil {
+               fmt.Printf(" cfg json trans error: %s\n", adapter, err.Error())
+               return false
+       }
+
+       err = Log.SetLogger(adapter, string(b))
+       if err != nil {
+               fmt.Printf("set %s failed: %s\n", adapter, err.Error())
+               return false
+       }
+
+       return true
+
+}
+
+func checkLogDir(path string) {
+       if path == "" {
+               return
+       }
+
+       var index int
+       pathSep := string(os.PathSeparator)
+       if index = strings.LastIndex(path, pathSep); index <= 2 {
+               return
+       }
+
+       perm, _ := strconv.ParseInt("0660", 8, 64)
+       if err := os.MkdirAll(path[0:index], os.FileMode(perm)); err != nil {
+               return
+       }
+}
+
+func loadCustom() map[string]interface{} {
+       fullPath := filepath.Join(util.GetCfgPath(), cfgFileName)
+       fmt.Println("log config path is:" + fullPath)
+       config, err := util.Read(fullPath)
+       if err != nil {
+               fmt.Println("read config file error")
+               return nil
+       }
+
+       cfg := make(map[string]interface{})
+       err = util.UnmarshalYaml(config, &cfg)
+
+       if err != nil {
+               fmt.Printf("parse config file error: %s\n", err.Error())
+               return nil
+       }
+       return cfg
+}
+
+func getConfig() (result *Cfg) {
+       result = getDefaultCfg()
+
+       customs := loadCustom()
+
+       if customs == nil {
+               return
+       }
+
+       var console map[interface{}]interface{}
+       if cons, exist := customs["console"]; exist {
+               console = cons.(map[interface{}]interface{})
+
+               if levelstr, exist := console["level"]; exist {
+                       if level, ok := loggerLevel[levelstr.(string)]; ok {
+                               result.Console.Level = level
+                       }
+               }
+       }
+       var file map[interface{}]interface{}
+       if f, exist := customs["file"]; !exist {
+               return
+       } else {
+               file = f.(map[interface{}]interface{})
+       }
+
+       if filename, e := file["filename"]; e {
+               result.File.FileName = filename.(string)
+       }
+       if levelstr, e := file["level"]; e {
+               if level, exist := loggerLevel[levelstr.(string)]; exist {
+                       result.File.Level = level
+               }
+       }
+       if maxlines, e := file["maxlines"]; e {
+               result.File.MaxLines = maxlines.(int)
+       }
+
+       if maxsize, e := file["maxsize"]; e {
+               result.File.MaxSize = maxsize.(int) * 1024 * 1024
+       }
+
+       if daily, e := file["daily"]; e {
+               result.File.Daily = daily.(bool)
+       }
+
+       if maxdays, e := file["maxdays"]; e {
+               result.File.MaxDays = maxdays.(int)
+       }
+
+       if rotate, e := file["rotate"]; e {
+               result.File.Rotate = rotate.(bool)
+       }
+
+       return
+}
+
+func getDefaultCfg() *Cfg {
+       return &Cfg{
+               Console: ConsoleCfg{
+                       Level: loggerLevel[defaultConsoleLevel],
+               },
+               File: FileCfg{
+                       FileName: "msb2pilot.log",
+                       Level:    loggerLevel[defaultFileLevel],
+                       MaxLines: 300000,
+                       MaxSize:  30 * 1024 * 1024,
+                       Daily:    true,
+                       MaxDays:  10,
+                       Rotate:   true,
+               },
+       }
+}
index 7624e46..8d7bfdd 100644 (file)
@@ -1,11 +1,13 @@
 package main
 
 import (
+       "msb2pilot/log"
        _ "msb2pilot2/routers"
+
        "github.com/astaxie/beego"
 )
 
 func main() {
+       log.Log.Informational("**************** init msb2pilot ************************")
        beego.Run()
 }
-