feat: 支持wire日志便于问题诊断

Signed-off-by: 金喜 <jinxi.kj@alibaba-inc.com>
This commit is contained in:
金喜 2023-11-16 15:20:32 +08:00
parent 3134437c29
commit a561b39a6d
5 changed files with 39 additions and 8 deletions

View File

@ -126,7 +126,7 @@ func (cli *StreamClient) processLoop() {
return 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) go cli.processDataFrame(message)
} }
@ -176,7 +176,8 @@ func (cli *StreamClient) processDataFrame(rawData []byte) {
} }
errSend := cli.SendDataFrameResponse(context.Background(), dataAck) 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 { if errSend != nil {
logger.GetLogger().Errorf("connection processDataFrame send response error: error=[%s]", errSend) 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时间 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) resp, err := httpClient.Do(req)
if err != nil { if err != nil {
return nil, err return nil, err
@ -319,6 +323,9 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co
if err != nil { if err != nil {
return nil, err 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{} endpoint := &payload.ConnectionEndpointResponse{}

View File

@ -41,7 +41,7 @@ type UserAgentConfig struct {
func NewDingtalkGoSDKUserAgent() *UserAgentConfig { func NewDingtalkGoSDKUserAgent() *UserAgentConfig {
return &UserAgentConfig{ return &UserAgentConfig{
UserAgent: "dingtalk-sdk-go/v0.5.1", UserAgent: "dingtalk-sdk-go/v0.6.1",
} }
} }

View File

@ -69,7 +69,7 @@ func main() {
flag.Parse() flag.Parse()
logger.SetLogger(logger.NewStdTestLogger()) logger.SetLogger(logger.NewStdTestLoggerWithDebug())
cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret))) cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)))

View File

@ -12,16 +12,27 @@ import (
// This logger is only for debug. Do not use it online. // This logger is only for debug. Do not use it online.
type StdTestLogger struct { type StdTestLogger struct {
isDebugEnabled bool
} }
func NewStdTestLogger() *StdTestLogger { func NewStdTestLogger() *StdTestLogger {
return &StdTestLogger{} return &StdTestLogger{
isDebugEnabled: false,
}
}
func NewStdTestLoggerWithDebug() *StdTestLogger {
return &StdTestLogger{
isDebugEnabled: true,
}
} }
func (l *StdTestLogger) Debugf(format string, args ...interface{}) { func (l *StdTestLogger) Debugf(format string, args ...interface{}) {
if l.isDebugEnabled {
fmt.Printf("%s [Debug] ", time.Now().String()) fmt.Printf("%s [Debug] ", time.Now().String())
fmt.Printf(format, args...) fmt.Printf(format, args...)
fmt.Print("\n") fmt.Print("\n")
}
} }
func (l *StdTestLogger) Infof(format string, args ...interface{}) { func (l *StdTestLogger) Infof(format string, args ...interface{}) {

View File

@ -2,7 +2,10 @@ package utils
import ( import (
"errors" "errors"
"fmt"
"net" "net"
"net/http"
"strings"
) )
func GetFirstLanIP() (string, error) { func GetFirstLanIP() (string, error) {
@ -23,3 +26,13 @@ func GetFirstLanIP() (string, error) {
} }
return "", errors.New("no valid interfaces") 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")
}