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
}
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{}

View File

@ -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",
}
}

View File

@ -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)))

View File

@ -12,17 +12,28 @@ 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{}) {
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{}) {
fmt.Printf("%s [INFO] ", time.Now().String())

View File

@ -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")
}