From a561b39a6d63f8232610fa2160baf47247a49002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E5=96=9C?= Date: Thu, 16 Nov 2023 15:20:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81wire=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=BE=BF=E4=BA=8E=E9=97=AE=E9=A2=98=E8=AF=8A=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 金喜 --- client/client.go | 11 +++++++++-- client/config.go | 2 +- example/example.go | 2 +- logger/std_logger.go | 19 +++++++++++++++---- utils/net.go | 13 +++++++++++++ 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/client/client.go b/client/client.go index 54dca96..247d126 100644 --- a/client/client.go +++ b/client/client.go @@ -126,7 +126,7 @@ func (cli *StreamClient) processLoop() { return } - logger.GetLogger().Debugf("ReadRawMessage : messageType=[%d] message=[%s]", messageType, string(message)) + logger.GetLogger().Debugf("[wire] [websocket] remote => local: \n%s", string(message)) go cli.processDataFrame(message) } @@ -176,7 +176,8 @@ func (cli *StreamClient) processDataFrame(rawData []byte) { } errSend := cli.SendDataFrameResponse(context.Background(), dataAck) - logger.GetLogger().Debugf("SendFrameAck dataAck=[%v", dataAck) + sentBytes, _ := json.Marshal(dataAck) + logger.GetLogger().Debugf("[wire] [websocket] local => remote:\n%s", string(sentBytes)) if errSend != nil { logger.GetLogger().Errorf("connection processDataFrame send response error: error=[%s]", errSend) @@ -304,6 +305,9 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co Timeout: 5 * time.Second, //设置超时,包含connection时间、任意重定向时间、读取response body时间 } + logger.GetLogger().Debugf("[wire] [http] local => remote:\n%s %s %s\nHost: %s\n%s\n\n%s", + req.Method, req.URL.RequestURI(), req.Proto, req.Host, + utils.DumpHeaders(req.Header), requestJsonBody) resp, err := httpClient.Do(req) if err != nil { return nil, err @@ -319,6 +323,9 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co if err != nil { return nil, err } + logger.GetLogger().Debugf("[wire] [http] remote => localhost:\n%s %s\n%s\n\n%s", + resp.Proto, resp.Status, + utils.DumpHeaders(resp.Header), responseJsonBody) endpoint := &payload.ConnectionEndpointResponse{} diff --git a/client/config.go b/client/config.go index baa1e92..dd8b5bd 100644 --- a/client/config.go +++ b/client/config.go @@ -41,7 +41,7 @@ type UserAgentConfig struct { func NewDingtalkGoSDKUserAgent() *UserAgentConfig { return &UserAgentConfig{ - UserAgent: "dingtalk-sdk-go/v0.5.1", + UserAgent: "dingtalk-sdk-go/v0.6.1", } } diff --git a/example/example.go b/example/example.go index 6b36ad1..3d447a2 100644 --- a/example/example.go +++ b/example/example.go @@ -69,7 +69,7 @@ func main() { flag.Parse() - logger.SetLogger(logger.NewStdTestLogger()) + logger.SetLogger(logger.NewStdTestLoggerWithDebug()) cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret))) diff --git a/logger/std_logger.go b/logger/std_logger.go index 8b9e7be..22f2aea 100644 --- a/logger/std_logger.go +++ b/logger/std_logger.go @@ -12,16 +12,27 @@ import ( // This logger is only for debug. Do not use it online. type StdTestLogger struct { + isDebugEnabled bool } func NewStdTestLogger() *StdTestLogger { - return &StdTestLogger{} + return &StdTestLogger{ + isDebugEnabled: false, + } +} + +func NewStdTestLoggerWithDebug() *StdTestLogger { + return &StdTestLogger{ + isDebugEnabled: true, + } } func (l *StdTestLogger) Debugf(format string, args ...interface{}) { - fmt.Printf("%s [Debug] ", time.Now().String()) - fmt.Printf(format, args...) - fmt.Print("\n") + if l.isDebugEnabled { + fmt.Printf("%s [Debug] ", time.Now().String()) + fmt.Printf(format, args...) + fmt.Print("\n") + } } func (l *StdTestLogger) Infof(format string, args ...interface{}) { diff --git a/utils/net.go b/utils/net.go index 69e261e..4c392a2 100644 --- a/utils/net.go +++ b/utils/net.go @@ -2,7 +2,10 @@ package utils import ( "errors" + "fmt" "net" + "net/http" + "strings" ) func GetFirstLanIP() (string, error) { @@ -23,3 +26,13 @@ func GetFirstLanIP() (string, error) { } return "", errors.New("no valid interfaces") } + +func DumpHeaders(h http.Header) string { + var lines []string + for name, values := range h { + for _, value := range values { + lines = append(lines, fmt.Sprintf("%s: %s", name, value)) + } + } + return strings.Join(lines, "\n") +}