func init() {
runMode = "prod"
logDirName := "logs"
logFileName := "myapp.log"
parentDirPath, _ := os.Getwd()
// 这边的逻辑是向上层找日志目录,为了解决 go test 时,执行文件在子目录,无日志目录
for {
logDirPath := path.Join(parentDirPath, logDirName)
beego.Debug(logDirPath)
if util.IsPathExist(logDirPath) {
break
}
parentDirPath = path.Dir(parentDirPath)
}
logPath := path.Join(parentDirPath, logDirName, logFileName)
beego.Notice("logPath:", logPath)
if runMode == "prod" {
beego.SetLogger(logs.AdapterMultiFile, `{"filename": "`+logPath+`", "maxdays": 2, "maxlines": 1000000}`)
beego.BeeLogger.DelLogger("console")
beego.SetLevel(beego.LevelInformational)
} else {
// 经观察,单独的 error 日志不会回滚,需注意
beego.SetLogger(logs.AdapterMultiFile, `{"filename": "`+logPath+`", "separate": ["error"], "maxdays": 2, "maxlines": 1000000}`)
beego.SetLevel(beego.LevelDebug)
}
logs.Async()
beego.Notice(fmt.Sprintf("run mode [%s]", runMode))
}