一、beego 日志处理
1、Beego 日志的基本使用
beego 的日志处理是基于 logs 模块搭建的,内置了一个变量 BeeLogger,默认已经是 logs.BeeLogger 类型,初始化了 console,也就是默认输出到 console。
一般在程序中我们使用如下的方式进行输出:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (c *MainController) Get() { // fmt.Printf("你好golang") // fmt.Println("你好golang") beego.Info("你好golang") beego.Error("我是一个错误信息") beego.Warning("我是一个警告信息") beego.Notice("我是一个通知信息") beego.Debug("我是一个调试信息") c.TplName = "index.html" }
2、Beego日志保存到文件
我们的程序往往期望把信息输出到 log 中,现在设置输出到文件很方便,如下所示:
beego.SetLogger("file", `{"filename":"logs/test.log"}`)
更多详细的日志配置请查看:https://beego.me/docs/module/logs.md
这个默认情况就会同时输出到两个地方,一个 console,一个 file,如果只想输出到文件, 就需要调用删除操作:
beego.BeeLogger.DelLogger("console")
package main import ( "beego_log_error/controllers" _ "beego_log_error/routers" "github.com/astaxie/beego" ) func main() { //设置日志输出的目录 beego.SetLogger("file", `{"filename":"logs/test.log"}`) beego.Run() }
二、beego 错误处理
1、页面跳转
我们在做 Web 开发的时候,经常需要页面跳转和错误处理,beego 这方面也进行了考虑, 通过 Redirect 方法来进行跳转:
func (this *AddController) Get() { this.Redirect("/", 302) }
跳转的时候注意后面的状态码
2、请求中的异常抛出
func (this *MainController) Get() { this.Abort("401") v := this.GetSession("asta") if v == nil { this.SetSession("asta", int(1)) this.Data["Email"] = 0 } else { this.SetSession("asta", v.(int)+1) this.Data["Email"] = v.(int) } this.TplName = "index.tpl" }
这样 this.Abort("401") 之后的代码不会再执行,而且会默认显示给用户如下页面:
3、自定义异常页面
beego 框架默认支持 401、403、404、500、503 这几种错误的处理。用户可以自定义相应 的错误处理,例如下面重新定义 404 页面:
func page_not_found(rw http.ResponseWriter, r *http.Request) { t, _ := template.New("404.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath + "/404.html") data := make(map[string]interface{}) data["content"] = "page not found" t.Execute(rw, data) } func main() { beego.ErrorHandler("404", page_not_found) beego.Router("/", &controllers.MainController{}) beego.Run() }
我们可以通过自定义错误页面 404.html 来处理 404 错误。
beego 更加人性化的还有一个设计就是支持用户自定义字符串错误类型处理函数,例如下面 的代码,用户注册了一个数据库出错的处理页面:
func dbError(rw http.ResponseWriter, r *http.Request) { t, _ := template.New("dberror.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath + "/dberro r.html") data := make(map[string]interface{}) data["content"] = "database is now down" t.Execute(rw, data) } func main() { beego.ErrorHandler("dbError", dbError) beego.Router("/", &controllers.MainController{}) beego.Run() }
一旦在入口注册该错误处理代码,那么你可以在任何你的逻辑中遇到数据库错误调用 this.Abort("dbError") 来进行异常页面处理。
4、Controller 定义 Error(推荐)
package controllers import ( "github.com/astaxie/beego" ) type ErrorController struct{ beego.Controller } func (c *ErrorController) Error404() { c.Data["content"] = "page not found" c.TplName = "errors/404.html" } func (c *ErrorController) Error500() { c.Data["content"] = "server error" c.TplName = "errors/501.html" } func (c *ErrorController) Error501() { c.Data["content"] = "server error" c.TplName = "errors/501.html" }
在main中配置
package main import ( "beego_log_error/controllers" _ "beego_log_error/routers" "github.com/astaxie/beego" ) func main() { //配置错误处理的控制器 beego.ErrorController(&controllers.ErrorController{}) beego.Run() }