From e42bbb46f957796eed1f9a632c1436d61c0e40e7 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 20 Apr 2018 18:12:47 +0800 Subject: [PATCH] =?UTF-8?q?ghttp.Server=20=E6=97=A5=E5=BF=97=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/http_server.go | 9 ++++++--- g/net/ghttp/http_server_log.go | 4 ++-- g/net/ghttp/http_server_options.go | 8 +++++++- g/os/gfilepool/gfilepool.go | 1 + geg/net/ghttp/log.go | 4 ++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/g/net/ghttp/http_server.go b/g/net/ghttp/http_server.go index 6fccbf003..d159ef96c 100644 --- a/g/net/ghttp/http_server.go +++ b/g/net/ghttp/http_server.go @@ -56,7 +56,8 @@ type Server struct { logPath *gtype.String // 存放日志的目录路径 errorLogEnabled *gtype.Bool // 是否开启error log accessLogEnabled *gtype.Bool // 是否开启access log - logger *glog.Logger // 日志对象 + accessLogger *glog.Logger // access log日志对象 + errorLogger *glog.Logger // error log日志对象 logHandler *gtype.Interface // 自定义的日志处理回调方法 } @@ -108,10 +109,12 @@ func GetServer(names...string) (*Server) { logPath : gtype.NewString(), accessLogEnabled : gtype.NewBool(), errorLogEnabled : gtype.NewBool(), - logger : glog.New(), + accessLogger : glog.New(), + errorLogger : glog.New(), logHandler : gtype.NewInterface(), } - s.logger.SetBacktraceSkip(4) + s.errorLogger.SetBacktraceSkip(4) + s.accessLogger.SetBacktraceSkip(4) // 设置路由解析缓存上限,使用LRU进行缓存淘汰 s.hooksCache.SetCap(10000) s.handlerCache.SetCap(10000) diff --git a/g/net/ghttp/http_server_log.go b/g/net/ghttp/http_server_log.go index 6d1fdc20a..db35df01d 100644 --- a/g/net/ghttp/http_server_log.go +++ b/g/net/ghttp/http_server_log.go @@ -25,7 +25,7 @@ func (s *Server) handleAccessLog(r *Request) { } content := fmt.Sprintf(`"%s %s %s %s" %s %s`, r.Method, r.Host, r.URL.String(), r.Proto, gconv.String(r.Response.status), gconv.String(r.Response.length)) content += fmt.Sprintf(`, %s, "%s", "%s"`, r.GetClientIp(), r.Referer(), r.UserAgent()) - s.logger.Println(content) + s.accessLogger.Println(content) } // 处理服务错误信息,主要是panic,http请求的status由access log进行管理 @@ -44,5 +44,5 @@ func (s *Server) handleErrorLog(error interface{}, r *Request) { content := fmt.Sprintf(`"%s %s %s %s"`, r.Method, r.Host, r.URL.String(), r.Proto) content += fmt.Sprintf(`, %s, "%s", "%s"`, r.GetClientIp(), r.Referer(), r.UserAgent()) content += fmt.Sprintf(`, %v`, error) - s.logger.Error(content) + s.errorLogger.Error(content) } diff --git a/g/net/ghttp/http_server_options.go b/g/net/ghttp/http_server_options.go index fffd508ba..e591c88e4 100644 --- a/g/net/ghttp/http_server_options.go +++ b/g/net/ghttp/http_server_options.go @@ -15,6 +15,7 @@ import ( "net/http" "crypto/tls" "path/filepath" + "gitee.com/johng/gf/g/os/gfile" ) // http server setting设置 @@ -157,7 +158,12 @@ func (s *Server)SetSessionIdName(name string) { // 设置日志目录 func (s *Server)SetLogPath(path string) error { - if err := s.logger.SetPath(path); err != nil { + errorLogPath := strings.TrimRight(path, gfile.Separator) + gfile.Separator + "error" + accessLogPath := strings.TrimRight(path, gfile.Separator) + gfile.Separator + "access" + if err := s.accessLogger.SetPath(accessLogPath); err != nil { + return err + } + if err := s.errorLogger.SetPath(errorLogPath); err != nil { return err } s.logPath.Set(path) diff --git a/g/os/gfilepool/gfilepool.go b/g/os/gfilepool/gfilepool.go index 751f99a98..df4aaee0b 100644 --- a/g/os/gfilepool/gfilepool.go +++ b/g/os/gfilepool/gfilepool.go @@ -57,6 +57,7 @@ func New(path string, flag int, expire int) *Pool { flag : flag, list : glist.New(), idle : expire, + closed : gtype.NewBool(), } // 独立的线程执行过期清理工作 if expire != -1 { diff --git a/geg/net/ghttp/log.go b/geg/net/ghttp/log.go index 69c789f76..0dd7414e4 100644 --- a/geg/net/ghttp/log.go +++ b/geg/net/ghttp/log.go @@ -6,10 +6,10 @@ import ( func main() { s := ghttp.GetServer() - s.BindHandler("/", func(r *ghttp.Request){ + s.BindHandler("/log/test", func(r *ghttp.Request){ r.Response.Writeln("哈喽世界!") - panic("test") }) + s.SetLogPath("/tmp/gf.log") s.SetAccessLogEnabled(true) s.SetErrorLogEnabled(true) s.SetPort(8199)