2018-04-19 19:11:10 +08:00
|
|
|
|
// Copyright 2018 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
|
|
|
|
|
|
//
|
|
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
|
|
|
|
|
// You can obtain one at https://gitee.com/johng/gf.
|
|
|
|
|
|
// 默认错误日志封装.
|
|
|
|
|
|
|
|
|
|
|
|
package ghttp
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
2018-04-20 17:53:34 +08:00
|
|
|
|
"net/http"
|
2018-04-19 19:11:10 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 处理服务错误信息,主要是panic,http请求的status由access log进行管理
|
|
|
|
|
|
func (s *Server) handleAccessLog(r *Request) {
|
|
|
|
|
|
if !s.IsAccessLogEnabled() {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
// 自定义错误处理
|
|
|
|
|
|
if v := s.GetLogHandler(); v != nil {
|
|
|
|
|
|
v(r)
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2018-09-04 23:40:16 +08:00
|
|
|
|
content := fmt.Sprintf(`"%s %s %s %s" %d %d`,
|
2018-04-29 23:19:02 +08:00
|
|
|
|
r.Method, r.Host, r.URL.String(), r.Proto,
|
2018-09-04 23:40:16 +08:00
|
|
|
|
r.Response.Status,
|
|
|
|
|
|
r.Response.ContentSize(),
|
2018-04-29 23:19:02 +08:00
|
|
|
|
)
|
|
|
|
|
|
content += fmt.Sprintf(` %.3f`, float64(r.LeaveTime - r.EnterTime)/1000)
|
2018-04-20 15:43:02 +08:00
|
|
|
|
content += fmt.Sprintf(`, %s, "%s", "%s"`, r.GetClientIp(), r.Referer(), r.UserAgent())
|
2018-10-10 18:39:57 +08:00
|
|
|
|
s.logger.Cat("access").Backtrace(false, 2).Println(content)
|
2018-04-19 19:11:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 处理服务错误信息,主要是panic,http请求的status由access log进行管理
|
|
|
|
|
|
func (s *Server) handleErrorLog(error interface{}, r *Request) {
|
2018-04-20 17:53:34 +08:00
|
|
|
|
r.Response.WriteStatus(http.StatusInternalServerError)
|
|
|
|
|
|
|
2018-10-10 18:39:57 +08:00
|
|
|
|
// 错误输出默认是开启的
|
2018-04-19 19:11:10 +08:00
|
|
|
|
if !s.IsErrorLogEnabled() {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2018-10-10 18:39:57 +08:00
|
|
|
|
|
2018-04-19 19:11:10 +08:00
|
|
|
|
// 自定义错误处理
|
|
|
|
|
|
if v := s.GetLogHandler(); v != nil {
|
|
|
|
|
|
v(r, error)
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2018-04-20 11:45:47 +08:00
|
|
|
|
|
2018-10-10 18:39:57 +08:00
|
|
|
|
// 错误日志信息
|
2018-04-23 11:20:48 +08:00
|
|
|
|
content := fmt.Sprintf(`%v, "%s %s %s %s"`, error, r.Method, r.Host, r.URL.String(), r.Proto)
|
2018-04-29 23:19:02 +08:00
|
|
|
|
content += fmt.Sprintf(` %.3f`, float64(r.LeaveTime - r.EnterTime)/1000)
|
2018-04-23 11:20:48 +08:00
|
|
|
|
content += fmt.Sprintf(`, %s, "%s", "%s"`, r.GetClientIp(), r.Referer(), r.UserAgent())
|
2018-10-10 18:39:57 +08:00
|
|
|
|
|
|
|
|
|
|
if s.logger.GetPath() == "" {
|
|
|
|
|
|
// 错误信息特殊处理,在未开启日志文件保存时强制强制输出到终端
|
|
|
|
|
|
s.logger.Cat("error").Backtrace(true, 2).StdPrint(true).Error(content)
|
|
|
|
|
|
} else {
|
|
|
|
|
|
s.logger.Cat("error").Backtrace(true, 2).Error(content)
|
|
|
|
|
|
}
|
2018-04-19 19:11:10 +08:00
|
|
|
|
}
|