mirror of
https://github.com/astaxie/beego.git
synced 2024-11-26 03:21:29 +00:00
add error show page
This commit is contained in:
parent
ddc3d7d58c
commit
f4a645027e
70
errors.go
Normal file
70
errors.go
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package beego
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"html/template"
|
||||||
|
"net/http"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
var tpl = `
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>beego application error</title>
|
||||||
|
<style>
|
||||||
|
html, body, body * {padding: 0; margin: 0;}
|
||||||
|
#header {background:#ffd; border-bottom:solid 2px #A31515; padding: 20px 10px;}
|
||||||
|
#header h2{ }
|
||||||
|
#footer {border-top:solid 1px #aaa; padding: 5px 10px; font-size: 12px; color:green;}
|
||||||
|
#content {padding: 5px;}
|
||||||
|
#content .stack b{ font-size: 13px; color: red;}
|
||||||
|
#content .stack pre{padding-left: 10px;}
|
||||||
|
table {}
|
||||||
|
td.t {text-align: right; padding-right: 5px; color: #888;}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="header">
|
||||||
|
<h2>{{.AppError}}</h2>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td class="t">Request Method: </td><td>{{.RequestMethod}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="t">Request URL: </td><td>{{.RequestURL}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="t">RemoteAddr: </td><td>{{.RemoteAddr }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="stack">
|
||||||
|
<b>Stack</b>
|
||||||
|
<pre>{{.Stack}}</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<p>beego {{ .BeegoVersion }} (beego framework)</p>
|
||||||
|
<p>golang version: {{.GoVersion}}</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`
|
||||||
|
|
||||||
|
func ShowErr(err interface{}, rw http.ResponseWriter, r *http.Request, Stack string) {
|
||||||
|
t, err := template.New("beegoerrortemp").Parse(tpl)
|
||||||
|
data := make(map[string]string)
|
||||||
|
data["AppError"] = AppName + ":" + fmt.Sprint(err)
|
||||||
|
data["RequestMethod"] = r.Method
|
||||||
|
data["RequestURL"] = r.RequestURI
|
||||||
|
data["RemoteAddr"] = r.RemoteAddr
|
||||||
|
data["Stack"] = Stack
|
||||||
|
data["BeegoVersion"] = VERSION
|
||||||
|
data["GoVersion"] = runtime.Version()
|
||||||
|
t.Execute(rw, data)
|
||||||
|
}
|
10
router.go
10
router.go
@ -1,6 +1,7 @@
|
|||||||
package beego
|
package beego
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -190,13 +191,20 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
|
|||||||
// go back to panic
|
// go back to panic
|
||||||
panic(err)
|
panic(err)
|
||||||
} else {
|
} else {
|
||||||
|
var stack string
|
||||||
Critical("Handler crashed with error", err)
|
Critical("Handler crashed with error", err)
|
||||||
for i := 1; ; i += 1 {
|
for i := 1; ; i++ {
|
||||||
_, file, line, ok := runtime.Caller(i)
|
_, file, line, ok := runtime.Caller(i)
|
||||||
if !ok {
|
if !ok {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
Critical(file, line)
|
Critical(file, line)
|
||||||
|
if RunMode == "dev" {
|
||||||
|
stack = stack + fmt.Sprintln(file, line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if RunMode == "dev" {
|
||||||
|
ShowErr(err, rw, r, stack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user