diff --git a/client.go b/client.go index 71cbfb7..8e63c7d 100644 --- a/client.go +++ b/client.go @@ -1700,9 +1700,9 @@ func (c *Client) WrapHttpHandler(handler ClientHttpHandler) http.Handler { if status_code > 0 { if err != nil { - c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f - %s", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds(), err.Error()) + c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f - %s", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code, time_taken.Seconds(), err.Error()) } else { - c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds()) + c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code, time_taken.Seconds()) } } }) @@ -1714,7 +1714,7 @@ func (c *Client) SafeWrapWebsocketHandler(handler websocket.Handler) http.Handle !strings.Contains(strings.ToLower(req.Header.Get("Connection")), "upgrade") { var status_code int status_code = WriteEmptyRespHeader(w, http.StatusBadRequest) - c.log.Write("", LOG_INFO, "[%s] %s %s %d[non-websocket]", req.RemoteAddr, req.Method, req.URL.String(), status_code) + c.log.Write("", LOG_INFO, "[%s] %s %s %d[non-websocket]", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code) return } handler.ServeHTTP(w, req) @@ -1728,9 +1728,11 @@ func (c *Client) WrapWebsocketHandler(handler ClientWebsocketHandler) websocket. var start_time time.Time var time_taken time.Duration var req *http.Request + var raw_url_path string req = ws.Request() - c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws]", req.RemoteAddr, req.Method, req.URL.String()) + raw_url_path = get_raw_url_path(req) + c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws]", req.RemoteAddr, req.Method, raw_url_path) start_time = time.Now() status_code, err = handler.ServeWebsocket(ws) @@ -1738,9 +1740,9 @@ func (c *Client) WrapWebsocketHandler(handler ClientWebsocketHandler) websocket. if status_code > 0 { if err != nil { - c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f - %s", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds(), err.Error()) + c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f - %s", req.RemoteAddr, req.Method, raw_url_path, status_code, time_taken.Seconds(), err.Error()) } else { - c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds()) + c.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f", req.RemoteAddr, req.Method, raw_url_path, status_code, time_taken.Seconds()) } } }) diff --git a/hodu.go b/hodu.go index eed0605..c6783b1 100644 --- a/hodu.go +++ b/hodu.go @@ -225,7 +225,7 @@ func (option RouteOption) String() string { func dump_call_frame_and_exit(log Logger, req *http.Request, err interface{}) { var buf []byte buf = make([]byte, 65536); buf = buf[:min(65536, runtime.Stack(buf, false))] - log.Write("", LOG_ERROR, "[%s] %s %s - %v\n%s", req.RemoteAddr, req.Method, req.URL.String(), err, string(buf)) + log.Write("", LOG_ERROR, "[%s] %s %s - %v\n%s", req.RemoteAddr, req.Method, get_raw_url_path(req), err, string(buf)) log.Close() os.Exit(99) // fatal error. treat panic() as a fatal runtime error } @@ -466,3 +466,13 @@ func (auth *HttpAuthConfig) Authenticate(req *http.Request) (int, string) { return http.StatusOK, "" } + + +// ------------------------------------ + +func get_raw_url_path(req *http.Request) string { + var path string + path = req.URL.Path + if req.URL.RawQuery != "" { path += "?" + req.URL.RawQuery } + return path +} diff --git a/server-pxy.go b/server-pxy.go index ce86806..ccb0293 100644 --- a/server-pxy.go +++ b/server-pxy.go @@ -375,7 +375,7 @@ func (pxy *server_pxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Requ } proxy_url = pxy.req_to_proxy_url(req, pi) - s.log.Write(pxy.Id, LOG_INFO, "[%s] %s %s -> %+v", req.RemoteAddr, req.Method, req.URL.String(), proxy_url) + s.log.Write(pxy.Id, LOG_INFO, "[%s] %s %s -> %+v", req.RemoteAddr, req.Method, get_raw_url_path(req), proxy_url) proxy_req, err = http.NewRequestWithContext(s.Ctx, req.Method, proxy_url.String(), req.Body) if err != nil { @@ -401,7 +401,7 @@ func (pxy *server_pxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Requ } else { status_code = resp.StatusCode if upgrade_required && resp.StatusCode == http.StatusSwitchingProtocols { - s.log.Write(pxy.Id, LOG_INFO, "[%s] %s %s %d", req.RemoteAddr, req.Method, req.URL.String(), status_code) + s.log.Write(pxy.Id, LOG_INFO, "[%s] %s %s %d", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code) err = pxy.serve_upgraded(w, req, resp) if err != nil { goto oops } return 0, nil// print the log mesage before calling serve_upgraded() and exit here @@ -426,7 +426,7 @@ func (pxy *server_pxy_http_main) ServeHTTP(w http.ResponseWriter, req *http.Requ _, err = io.Copy(w, resp_body) if err != nil { - s.log.Write(pxy.Id, LOG_WARN, "[%s] %s %s %s", req.RemoteAddr, req.Method, req.URL.String(), err.Error()) + s.log.Write(pxy.Id, LOG_WARN, "[%s] %s %s %s", req.RemoteAddr, req.Method, get_raw_url_path(req), err.Error()) } // TODO: handle trailers diff --git a/server.go b/server.go index e200ea3..0a2f5b2 100644 --- a/server.go +++ b/server.go @@ -1417,9 +1417,9 @@ func (s *Server) WrapHttpHandler(handler ServerHttpHandler) http.Handler { if status_code > 0 { if err != nil { - s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f - %s", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds(), err.Error()) + s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f - %s", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code, time_taken.Seconds(), err.Error()) } else { - s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds()) + s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s %d %.9f", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code, time_taken.Seconds()) } } }) @@ -1431,7 +1431,7 @@ func (s *Server) SafeWrapWebsocketHandler(handler websocket.Handler) http.Handle !strings.Contains(strings.ToLower(req.Header.Get("Connection")), "upgrade") { var status_code int status_code = WriteEmptyRespHeader(w, http.StatusBadRequest) - s.log.Write("", LOG_INFO, "[%s] %s %s %d[non-websocket]", req.RemoteAddr, req.Method, req.URL.String(), status_code) + s.log.Write("", LOG_INFO, "[%s] %s %s %d[non-websocket]", req.RemoteAddr, req.Method, get_raw_url_path(req), status_code) return } handler.ServeHTTP(w, req) @@ -1445,9 +1445,11 @@ func (s *Server) WrapWebsocketHandler(handler ServerWebsocketHandler) websocket. var start_time time.Time var time_taken time.Duration var req *http.Request + var raw_url_path string req = ws.Request() - s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws]", req.RemoteAddr, req.Method, req.URL.String()) + raw_url_path = get_raw_url_path(req) + s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws]", req.RemoteAddr, req.Method, raw_url_path) start_time = time.Now() status_code, err = handler.ServeWebsocket(ws) @@ -1455,9 +1457,9 @@ func (s *Server) WrapWebsocketHandler(handler ServerWebsocketHandler) websocket. if status_code > 0 { if err != nil { - s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f - %s", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds(), err.Error()) + s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f - %s", req.RemoteAddr, req.Method, raw_url_path, status_code, time_taken.Seconds(), err.Error()) } else { - s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f", req.RemoteAddr, req.Method, req.URL.String(), status_code, time_taken.Seconds()) + s.log.Write(handler.Identity(), LOG_INFO, "[%s] %s %s [ws] %d %.9f", req.RemoteAddr, req.Method, raw_url_path, status_code, time_taken.Seconds()) } } })