6 "github.com/astaxie/beego/logs"
14 type ConsoleCfg struct {
15 Level int `json:"level"`
19 FileName string `json:"filename"`
20 Level int `json:"level"`
21 MaxLines int `json:"maxlines"`
22 MaxSize int `josn:"maxsize"`
23 Daily bool `json:"daily"`
24 MaxDays int `json:"maxdays"`
25 Rotate bool `json:"rotate"`
29 Console ConsoleCfg `json:"console"`
30 File FileCfg `json:"file"`
34 cfgFileName = "log.yml"
35 defaultConsoleLevel = "Warn"
36 defaultFileLevel = "Info"
41 loggerLevel = map[string]int{"Emergency": 0, "Alert": 1, "Critical": 2, "Error": 3, "Warn": 4, "Notice": 5, "Info": 6, "Debug": 7}
45 Log = logs.NewLogger()
46 Log.EnableFuncCallDepth(true)
49 setLogger(logs.AdapterConsole, &cfg.Console)
50 checkLogDir(cfg.File.FileName)
51 setLogger(logs.AdapterFile, &cfg.File)
54 func setLogger(adapter string, cfg interface{}) bool {
55 b, err := json.Marshal(cfg)
57 fmt.Printf(" cfg json trans error: %s\n", adapter, err.Error())
61 err = Log.SetLogger(adapter, string(b))
63 fmt.Printf("set %s failed: %s\n", adapter, err.Error())
71 func checkLogDir(path string) {
77 pathSep := string(os.PathSeparator)
78 if index = strings.LastIndex(path, pathSep); index <= 2 {
82 perm, _ := strconv.ParseInt("0660", 8, 64)
83 if err := os.MkdirAll(path[0:index], os.FileMode(perm)); err != nil {
88 func loadCustom() map[string]interface{} {
89 fullPath := filepath.Join(util.GetCfgPath(), cfgFileName)
90 fmt.Println("log config path is:" + fullPath)
91 config, err := util.Read(fullPath)
93 fmt.Println("read config file error")
97 cfg := make(map[string]interface{})
98 err = util.UnmarshalYaml(config, &cfg)
101 fmt.Printf("parse config file error: %s\n", err.Error())
107 func getConfig() (result *Cfg) {
108 result = getDefaultCfg()
110 customs := loadCustom()
116 var console map[interface{}]interface{}
117 if cons, exist := customs["console"]; exist {
118 console = cons.(map[interface{}]interface{})
120 if levelstr, exist := console["level"]; exist {
121 if level, ok := loggerLevel[levelstr.(string)]; ok {
122 result.Console.Level = level
126 var file map[interface{}]interface{}
127 if f, exist := customs["file"]; !exist {
130 file = f.(map[interface{}]interface{})
133 if filename, e := file["filename"]; e {
134 result.File.FileName = filename.(string)
136 if levelstr, e := file["level"]; e {
137 if level, exist := loggerLevel[levelstr.(string)]; exist {
138 result.File.Level = level
141 if maxlines, e := file["maxlines"]; e {
142 result.File.MaxLines = maxlines.(int)
145 if maxsize, e := file["maxsize"]; e {
146 result.File.MaxSize = maxsize.(int) * 1024 * 1024
149 if daily, e := file["daily"]; e {
150 result.File.Daily = daily.(bool)
153 if maxdays, e := file["maxdays"]; e {
154 result.File.MaxDays = maxdays.(int)
157 if rotate, e := file["rotate"]; e {
158 result.File.Rotate = rotate.(bool)
164 func getDefaultCfg() *Cfg {
167 Level: loggerLevel[defaultConsoleLevel],
170 FileName: "msb2pilot.log",
171 Level: loggerLevel[defaultFileLevel],
173 MaxSize: 30 * 1024 * 1024,