From 05741aaddaee65c2c71003e6a3376b1333aa742f Mon Sep 17 00:00:00 2001 From: John Date: Fri, 20 Apr 2018 11:45:47 +0800 Subject: [PATCH] =?UTF-8?q?ghttp.Server=20log=E5=8A=9F=E8=83=BD=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/database/gredis/gredis.go | 1 + g/net/ghttp/http_server_auto.go | 3 --- g/net/ghttp/http_server_handler.go | 3 ++- g/net/ghttp/http_server_log.go | 18 +++++++----------- geg/net/ghttp/log.go | 16 ++++++++++++++++ 5 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 geg/net/ghttp/log.go diff --git a/g/database/gredis/gredis.go b/g/database/gredis/gredis.go index 48167b66f..606891a26 100644 --- a/g/database/gredis/gredis.go +++ b/g/database/gredis/gredis.go @@ -5,6 +5,7 @@ // You can obtain one at https://gitee.com/johng/gf. // Redis客户端. +// Redis中文手册文档请参考:http://redisdoc.com/ ,Redis官方命令请参考:https://redis.io/commands package gredis import ( diff --git a/g/net/ghttp/http_server_auto.go b/g/net/ghttp/http_server_auto.go index 4fc6fba27..f889b1ed3 100644 --- a/g/net/ghttp/http_server_auto.go +++ b/g/net/ghttp/http_server_auto.go @@ -13,9 +13,6 @@ func (s *Server) startCloseQueueLoop() { for { if v := s.closeQueue.PopFront(); v != nil { r := v.(*Request) - - s.handleAccessLog(r) - s.callHookHandler(r, "BeforeClose") // 关闭当前会话的Cookie r.Cookie.Close() diff --git a/g/net/ghttp/http_server_handler.go b/g/net/ghttp/http_server_handler.go index 7538dca51..403d54114 100644 --- a/g/net/ghttp/http_server_handler.go +++ b/g/net/ghttp/http_server_handler.go @@ -43,6 +43,7 @@ func (s *Server)handleRequest(w http.ResponseWriter, r *http.Request) { if e := recover(); e != nil { s.handleErrorLog(e, request) } + s.handleAccessLog(request) }() // 事件 - BeforeServe @@ -134,7 +135,7 @@ func (s *Server)doServeFile(r *Request, path string) { r.Response.WriteStatus(http.StatusForbidden) } } else { - // 读取文件内容返回 + // 读取文件内容返回, no buffer http.ServeContent(r.Response.ResponseWriter, &r.Request, info.Name(), info.ModTime(), f) } f.Close() diff --git a/g/net/ghttp/http_server_log.go b/g/net/ghttp/http_server_log.go index d3b45d0f3..d3be385ff 100644 --- a/g/net/ghttp/http_server_log.go +++ b/g/net/ghttp/http_server_log.go @@ -27,12 +27,9 @@ func (s *Server) handleAccessLog(r *Request) { if v := r.Response.Header().Get("Status Code"); v != "" { status = v } - content := fmt.Sprintf(`%s %s %s`, r.Method, r.URL.String(), r.Proto) - content += fmt.Sprintf(", host: %s", r.Host) - content += fmt.Sprintf(", from: %s", strings.Split(r.RemoteAddr, ":")[0]) - content += fmt.Sprintf(", refer: %s", r.Referer()) - content += fmt.Sprintf(", status: %v", status) - s.logger.Info(content) + content := fmt.Sprintf(`"%s %s %s %s" %s`, r.Method, r.Host, r.URL.String(), r.Proto, status) + content += fmt.Sprintf(`, %s, "%s", "%s"`, strings.Split(r.RemoteAddr, ":")[0], r.Referer(), r.UserAgent()) + s.logger.Println(content) } // 处理服务错误信息,主要是panic,http请求的status由access log进行管理 @@ -45,10 +42,9 @@ func (s *Server) handleErrorLog(error interface{}, r *Request) { v(r, error) return } - content := fmt.Sprintf(`%s %s %s`, r.Method, r.URL.String(), r.Proto) - content += fmt.Sprintf(", host: %s", r.Host) - content += fmt.Sprintf(", from: %s", strings.Split(r.RemoteAddr, ":")[0]) - content += fmt.Sprintf(", refer: %s", r.Referer()) - content += fmt.Sprintf(", error: %v", error) + + content := fmt.Sprintf(`"%s %s %s %s"`, r.Method, r.Host, r.URL.String(), r.Proto) + content += fmt.Sprintf(`, %s, "%s", "%s"`, strings.Split(r.RemoteAddr, ":")[0], r.Referer(), r.UserAgent()) + content += fmt.Sprintf(`, %v`, error) s.logger.Error(content) } diff --git a/geg/net/ghttp/log.go b/geg/net/ghttp/log.go new file mode 100644 index 000000000..ecde279a4 --- /dev/null +++ b/geg/net/ghttp/log.go @@ -0,0 +1,16 @@ +package main + +import ( + "gitee.com/johng/gf/g/net/ghttp" +) + +func main() { + s := ghttp.GetServer() + s.BindHandler("/", func(r *ghttp.Request){ + r.Response.Writeln("哈喽世界!") + }) + s.SetAccessLogEnabled(true) + s.SetErrorLogEnabled(true) + s.SetPort(8199) + s.Run() +} \ No newline at end of file