@@ -2,6 +2,9 @@ package log
22
33import (
44 "context"
5+ "github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Topic"
6+ "google.golang.org/protobuf/encoding/protojson"
7+ "google.golang.org/protobuf/proto"
58 "time"
69
710 "github.com/ydb-platform/ydb-go-sdk/v3/internal/kv"
@@ -885,6 +888,39 @@ func internalTopic(l Logger, d trace.Detailer) (t trace.Topic) {
885888 kv .Version (),
886889 )
887890 }
891+
892+ t .OnWriterSentGRPCMessage = func (info trace.TopicWriterSentGRPCMessageInfo ) {
893+ if d .Details ()& trace .TopicWriterStreamGrpcMessageEvents == 0 {
894+ return
895+ }
896+
897+ ctx := with (context .Background (), TRACE , "ydb" , "topic" , "writer" , "grpc" )
898+ l .Log (
899+ ctx , "topic writer sent grpc message (message body and metadata are removed)" ,
900+ kv .String ("topic_stream_internal_id" , info .TopicStreamInternalID ),
901+ kv .String ("session_id" , info .SessionID ),
902+ kv .Int ("message_number" , info .MessageNumber ),
903+ kv .Stringer ("message" , lazyProtoStringifer {info .Message }),
904+ kv .Error (info .Error ),
905+ kv .Version (),
906+ )
907+ }
908+ t .OnWriterReceiveGRPCMessage = func (info trace.TopicWriterReceiveGRPCMessageInfo ) {
909+ if d .Details ()& trace .TopicWriterStreamGrpcMessageEvents == 0 {
910+ return
911+ }
912+
913+ ctx := with (context .Background (), TRACE , "ydb" , "topic" , "writer" , "grpc" )
914+ l .Log (
915+ ctx , "topic writer received grpc message (message body and metadata are removed)" ,
916+ kv .String ("topic_stream_internal_id" , info .TopicStreamInternalID ),
917+ kv .String ("session_id" , info .SessionID ),
918+ kv .Int ("message_number" , info .MessageNumber ),
919+ kv .Stringer ("message" , lazyProtoStringifer {info .Message }),
920+ kv .Error (info .Error ),
921+ kv .Version (),
922+ )
923+ }
888924 t .OnWriterReadUnknownGrpcMessage = func (info trace.TopicOnWriterReadUnknownGrpcMessageInfo ) {
889925 if d .Details ()& trace .TopicWriterStreamEvents == 0 {
890926 return
@@ -899,3 +935,37 @@ func internalTopic(l Logger, d trace.Detailer) (t trace.Topic) {
899935
900936 return t
901937}
938+
939+ type lazyProtoStringifer struct {
940+ message proto.Message
941+ }
942+
943+ func (s lazyProtoStringifer ) String () string {
944+ // cut message data
945+ if writeRequest , ok := s .message .(* Ydb_Topic.StreamWriteMessage_FromClient ); ok {
946+ if data := writeRequest .GetWriteRequest (); data != nil {
947+ type messDataType struct {
948+ Data []byte
949+ Metadata []* Ydb_Topic.MetadataItem
950+ }
951+ storage := make ([]messDataType , len (data .Messages ))
952+ for i := range data .Messages {
953+ storage [i ].Data = data .Messages [i ].Data
954+ data .Messages [i ] = nil
955+
956+ storage [i ].Metadata = data .Messages [i ].MetadataItems
957+ data .Messages [i ].MetadataItems = nil
958+ }
959+
960+ defer func () {
961+ for i := range data .Messages {
962+ data .Messages [i ].Data = storage [i ].Data
963+ data .Messages [i ].MetadataItems = storage [i ].Metadata
964+ }
965+ }()
966+ }
967+ }
968+
969+ res := protojson.MarshalOptions {AllowPartial : true }.Format (s .message )
970+ return res
971+ }
0 commit comments