From 8ec48b2e5d2e7a515ffc2302e29576f0dcedd34a Mon Sep 17 00:00:00 2001 From: Cody Oss Date: Wed, 18 Sep 2024 12:59:37 -0500 Subject: [PATCH] feat: add logging to gapics As a follow up to this PR we will need to add a little logging support in the gax REST streaming helper. For now we should add this with minimal changes but in the future we may want to feed that helper more information to have richer logs. This is a very small amount of RPCs that use this code path today. --- internal/gengapic/client_init_test.go | 32 ++++++++++++++----- internal/gengapic/doc_file.go | 2 ++ internal/gengapic/gengrpc.go | 9 ++++++ internal/gengapic/genrest.go | 29 ++++++++++++++--- internal/gengapic/lro.go | 2 ++ internal/gengapic/paging.go | 2 ++ internal/gengapic/stream.go | 4 +++ .../gengapic/testdata/custom_op_init.want | 2 ++ .../testdata/deprecated_client_init.want | 4 +++ internal/gengapic/testdata/doc_file.want | 1 + .../gengapic/testdata/doc_file_alpha.want | 1 + .../testdata/doc_file_alpha_emptyservice.want | 1 + internal/gengapic/testdata/doc_file_beta.want | 1 + .../testdata/doc_file_beta_emptyservice.want | 1 + .../doc_file_deprecated_emptyservice.want | 1 + .../testdata/doc_file_emptyservice.want | 1 + .../gengapic/testdata/empty_client_init.want | 4 +++ .../gengapic/testdata/foo_client_init.want | 2 ++ .../testdata/foo_rest_client_init.want | 2 ++ .../gengapic/testdata/lro_client_init.want | 2 ++ .../gengapic/testdata/method_BidiThings.want | 2 ++ .../testdata/method_ClientThings.want | 2 ++ .../gengapic/testdata/method_EmptyLRO.want | 2 ++ .../testdata/method_GetAnotherThing.want | 2 ++ .../testdata/method_GetEmptyThing.want | 2 ++ .../testdata/method_GetManyOtherThings.want | 2 ++ .../testdata/method_GetManyThings.want | 2 ++ .../method_GetManyThingsOptional.want | 2 ++ .../gengapic/testdata/method_GetOneThing.want | 2 ++ .../gengapic/testdata/method_RespLRO.want | 2 ++ .../testdata/method_ServerThings.want | 2 ++ internal/gengapic/testdata/rest_CustomOp.want | 2 ++ internal/gengapic/testdata/rest_EmptyRPC.want | 2 ++ .../gengapic/testdata/rest_HttpBodyRPC.want | 2 ++ .../testdata/rest_LongrunningRPC.want | 2 ++ .../gengapic/testdata/rest_PagingRPC.want | 2 ++ .../testdata/rest_ServerStreamRPC.want | 1 + internal/gengapic/testdata/rest_UnaryRPC.want | 2 ++ .../gengapic/testdata/rest_UpdateRPC.want | 2 ++ 39 files changed, 127 insertions(+), 13 deletions(-) diff --git a/internal/gengapic/client_init_test.go b/internal/gengapic/client_init_test.go index 74209f2ab..b4a30e74b 100644 --- a/internal/gengapic/client_init_test.go +++ b/internal/gengapic/client_init_test.go @@ -414,6 +414,9 @@ func TestClientInit(t *testing.T) { {Name: "iampb", Path: "cloud.google.com/go/iam/apiv1/iampb"}: true, {Name: "locationpb", Path: "google.golang.org/genproto/googleapis/cloud/location"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog/cloggrpc"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 6, }, @@ -436,6 +439,8 @@ func TestClientInit(t *testing.T) { {Name: "iampb", Path: "cloud.google.com/go/iam/apiv1/iampb"}: true, {Name: "locationpb", Path: "google.golang.org/genproto/googleapis/cloud/location"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 6, }, @@ -453,6 +458,9 @@ func TestClientInit(t *testing.T) { {Name: "gtransport", Path: "google.golang.org/api/transport/grpc"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, {Name: "httptransport", Path: "google.golang.org/api/transport/http"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog/cloggrpc"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 1, }, @@ -469,9 +477,12 @@ func TestClientInit(t *testing.T) { {Name: "longrunningpb", Path: "cloud.google.com/go/longrunning/autogen/longrunningpb"}: true, {Name: "lroauto", Path: "cloud.google.com/go/longrunning/autogen"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, - {Path: "context"}: true, - {Path: "google.golang.org/api/option"}: true, - {Path: "google.golang.org/grpc"}: true, + {Path: "context"}: true, + {Path: "google.golang.org/api/option"}: true, + {Path: "google.golang.org/grpc"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog/cloggrpc"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 6, }, @@ -484,11 +495,14 @@ func TestClientInit(t *testing.T) { {Name: "gtransport", Path: "google.golang.org/api/transport/grpc"}: true, {Name: "httptransport", Path: "google.golang.org/api/transport/http"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, - {Path: "context"}: true, - {Path: "google.golang.org/api/option"}: true, - {Path: "google.golang.org/api/option/internaloption"}: true, - {Path: "google.golang.org/grpc"}: true, - {Path: "net/http"}: true, + {Path: "context"}: true, + {Path: "google.golang.org/api/option"}: true, + {Path: "google.golang.org/api/option/internaloption"}: true, + {Path: "google.golang.org/grpc"}: true, + {Path: "net/http"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog/cloggrpc"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 1, }, @@ -506,6 +520,8 @@ func TestClientInit(t *testing.T) { {Path: "net/http"}: true, {Name: "httptransport", Path: "google.golang.org/api/transport/http"}: true, {Name: "mypackagepb", Path: "github.com/googleapis/mypackage"}: true, + {Path: "github.com/googleapis/gax-go/v2/clog"}: true, + {Path: "log/slog"}: true, }, wantNumSnps: 1, setExt: func() (protoreflect.ExtensionType, interface{}) { diff --git a/internal/gengapic/doc_file.go b/internal/gengapic/doc_file.go index af7a6d182..509e0e964 100644 --- a/internal/gengapic/doc_file.go +++ b/internal/gengapic/doc_file.go @@ -133,6 +133,8 @@ func (g *generator) genDocFile(year int, scopes []string, serv *descriptorpb.Ser p(")") p("") + p("const serviceName = %q", g.serviceConfig.GetName()) + p("// For more information on implementing a client constructor hook, see") p("// https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors.") p("type clientHookParams struct{}") diff --git a/internal/gengapic/gengrpc.go b/internal/gengapic/gengrpc.go index 9857e11c2..52f762f17 100644 --- a/internal/gengapic/gengrpc.go +++ b/internal/gengapic/gengrpc.go @@ -110,7 +110,9 @@ func (g *generator) unaryGRPCCall(servName string, m *descriptorpb.MethodDescrip p("var resp *%s", retTyp) p("err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" resp, err = %s", g.grpcStubCall(m)) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", cloggrpc.ProtoMessageResponse(req))`, m.GetName()) p(" return err") p("}, opts...)") p("if err != nil {") @@ -147,7 +149,9 @@ func (g *generator) emptyUnaryGRPCCall(servName string, m *descriptorpb.MethodDe g.appendCallOpts(m) p("err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" _, err = %s", g.grpcStubCall(m)) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api empty response", "serviceName", serviceName, "rpcName", %q)`, m.GetName()) p(" return err") p("}, opts...)") p("return err") @@ -295,10 +299,15 @@ func (g *generator) grpcClientInit(serv *descriptorpb.ServiceDescriptorProto, se p("// The x-goog-* metadata to be sent with each request.") p("xGoogHeaders []string") + p("") + p("logger *slog.Logger") p("}") p("") + g.imports[pbinfo.ImportSpec{Path: "log/slog"}] = true + g.imports[pbinfo.ImportSpec{Path: "github.com/googleapis/gax-go/v2/clog"}] = true + g.imports[pbinfo.ImportSpec{Path: "github.com/googleapis/gax-go/v2/clog/cloggrpc"}] = true g.imports[pbinfo.ImportSpec{Path: "google.golang.org/grpc"}] = true g.imports[imp] = true diff --git a/internal/gengapic/genrest.go b/internal/gengapic/genrest.go index b9bf409b5..a4cde12db 100644 --- a/internal/gengapic/genrest.go +++ b/internal/gengapic/genrest.go @@ -91,10 +91,14 @@ func (g *generator) restClientInit(serv *descriptorpb.ServiceDescriptorProto, se p("") p(" // Points back to the CallOptions field of the containing %sClient", servName) p(" CallOptions **%sCallOptions", servName) + p("") + p(" logger *slog.Logger") p("}") p("") g.restClientUtilities(serv, servName, hasRPCForLRO) + g.imports[pbinfo.ImportSpec{Path: "log/slog"}] = true + g.imports[pbinfo.ImportSpec{Path: "github.com/googleapis/gax-go/v2/clog"}] = true g.imports[pbinfo.ImportSpec{Path: "net/http"}] = true g.imports[pbinfo.ImportSpec{Name: "httptransport", Path: "google.golang.org/api/transport/http"}] = true g.imports[pbinfo.ImportSpec{Path: "google.golang.org/api/option/internaloption"}] = true @@ -617,7 +621,7 @@ func (g *generator) serverStreamRESTCall(servName string, s *descriptorpb.Servic // rest-client method p("func (c *%s) %s(ctx context.Context, req *%s.%s, opts ...gax.CallOption) (%s.%s_%sClient, error) {", lowcaseServName, m.GetName(), inSpec.Name, inType.GetName(), servSpec.Name, s.GetName(), m.GetName()) - body := "nil" + body, logBody := "nil", "nil" verb := strings.ToUpper(info.verb) // Marshal body for HTTP methods that take a body. @@ -638,6 +642,7 @@ func (g *generator) serverStreamRESTCall(servName string, s *descriptorpb.Servic p("") body = "bytes.NewReader(jsonReq)" + logBody = "jsonReq" g.imports[pbinfo.ImportSpec{Path: "bytes"}] = true g.imports[pbinfo.ImportSpec{Path: "google.golang.org/protobuf/encoding/protojson"}] = true } @@ -658,6 +663,7 @@ func (g *generator) serverStreamRESTCall(servName string, s *descriptorpb.Servic p(" httpReq = httpReq.WithContext(ctx)") p(" httpReq.Header = headers") p("") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", clog.HTTPRequest(httpReq, %s))`, m.GetName(), logBody) p(" httpRsp, err := c.httpClient.Do(httpReq)") p(" if err != nil{") p(" return err") @@ -800,10 +806,12 @@ func (g *generator) pagingRESTCall(servName string, m *descriptorpb.MethodDescri p("it := &%s{}", pt.iterTypeName) p("req = proto.Clone(req).(*%s.%s)", inSpec.Name, inType.GetName()) - maybeReqBytes := "nil" + maybeReqBytes, logBody := "nil", "nil" + if info.body != "" { g.protoJSONMarshaler() maybeReqBytes = "bytes.NewReader(jsonReq)" + logBody = "jsonReq" g.imports[pbinfo.ImportSpec{Path: "bytes"}] = true } @@ -835,6 +843,7 @@ func (g *generator) pagingRESTCall(servName string, m *descriptorpb.MethodDescri // TODO: Should this http.Request use WithContext? p(" httpReq.Header = headers") p("") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", clog.HTTPRequest(httpReq, %s))`, m.GetName(), logBody) p(" httpRsp, err := c.httpClient.Do(httpReq)") p(" if err != nil{") p(` return err`) @@ -849,6 +858,7 @@ func (g *generator) pagingRESTCall(servName string, m *descriptorpb.MethodDescri p(" if err != nil {") p(` return err`) p(" }") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", clog.HTTPResponse(httpRsp, buf))`, m.GetName()) p("") p(" if err := unm.Unmarshal(buf, resp); err != nil {") p(" return err") @@ -916,7 +926,7 @@ func (g *generator) lroRESTCall(servName string, m *descriptorpb.MethodDescripto // TODO(noahdietz): handle deadlines? // TODO(noahdietz): handle calloptions - body := "nil" + body, logBody := "nil", "nil" verb := strings.ToUpper(info.verb) // Marshal body for HTTP methods that take a body. @@ -937,6 +947,7 @@ func (g *generator) lroRESTCall(servName string, m *descriptorpb.MethodDescripto p("") body = "bytes.NewReader(jsonReq)" + logBody = "jsonReq" g.imports[pbinfo.ImportSpec{Path: "bytes"}] = true } @@ -957,6 +968,7 @@ func (g *generator) lroRESTCall(servName string, m *descriptorpb.MethodDescripto p(" httpReq = httpReq.WithContext(ctx)") p(" httpReq.Header = headers") p("") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", clog.HTTPRequest(httpReq, %s))`, m.GetName(), logBody) p(" httpRsp, err := c.httpClient.Do(httpReq)") p(" if err != nil{") p(" return err") @@ -966,6 +978,7 @@ func (g *generator) lroRESTCall(servName string, m *descriptorpb.MethodDescripto p(" if err = googleapi.CheckResponse(httpRsp); err != nil {") p(" return err") p(" }") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", clog.HTTPResponse(httpRsp, buf))`, m.GetName()) p("") p(" buf, err := io.ReadAll(httpRsp.Body)") p(" if err != nil {") @@ -1023,7 +1036,7 @@ func (g *generator) emptyUnaryRESTCall(servName string, m *descriptorpb.MethodDe // TODO(dovs): handle deadlines // TODO(dovs): handle call options - body := "nil" + body, logBody := "nil", "nil" verb := strings.ToUpper(info.verb) // Marshal body for HTTP methods that take a body. @@ -1044,6 +1057,7 @@ func (g *generator) emptyUnaryRESTCall(servName string, m *descriptorpb.MethodDe p("}") p("") body = "bytes.NewReader(jsonReq)" + logBody = "jsonReq" g.imports[pbinfo.ImportSpec{Path: "bytes"}] = true g.imports[pbinfo.ImportSpec{Path: "google.golang.org/protobuf/encoding/protojson"}] = true } @@ -1063,11 +1077,13 @@ func (g *generator) emptyUnaryRESTCall(servName string, m *descriptorpb.MethodDe p(" httpReq = httpReq.WithContext(ctx)") p(" httpReq.Header = headers") p("") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", clog.HTTPRequest(httpReq, %s))`, m.GetName(), logBody) p(" httpRsp, err := c.httpClient.Do(httpReq)") p(" if err != nil{") p(" return err") p(" }") p(" defer httpRsp.Body.Close()") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", clog.HTTPResponse(httpRsp, nil))`, m.GetName()) p("") p(" // Returns nil if there is no error, otherwise wraps") p(" // the response code and body into a non-nil error") @@ -1117,7 +1133,7 @@ func (g *generator) unaryRESTCall(servName string, m *descriptorpb.MethodDescrip // TODO(dovs): handle deadlines? // TODO(dovs): handle calloptions - body := "nil" + body, logBody := "nil", "nil" verb := strings.ToUpper(info.verb) // Marshal body for HTTP methods that take a body. @@ -1139,6 +1155,7 @@ func (g *generator) unaryRESTCall(servName string, m *descriptorpb.MethodDescrip p("") body = "bytes.NewReader(jsonReq)" + logBody = "jsonReq" g.imports[pbinfo.ImportSpec{Path: "bytes"}] = true g.imports[pbinfo.ImportSpec{Path: "google.golang.org/protobuf/encoding/protojson"}] = true @@ -1166,6 +1183,7 @@ func (g *generator) unaryRESTCall(servName string, m *descriptorpb.MethodDescrip p(" httpReq = httpReq.WithContext(ctx)") p(" httpReq.Header = headers") p("") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", clog.HTTPRequest(httpReq, %s))`, m.GetName(), logBody) p(" httpRsp, err := c.httpClient.Do(httpReq)") p(" if err != nil{") p(" return err") @@ -1180,6 +1198,7 @@ func (g *generator) unaryRESTCall(servName string, m *descriptorpb.MethodDescrip p(" if err != nil {") p(" return err") p(" }") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", clog.HTTPResponse(httpRsp, buf))`, m.GetName()) p("") if isHTTPBodyMessage { p("resp.Data = buf") diff --git a/internal/gengapic/lro.go b/internal/gengapic/lro.go index 71bcecf60..984c28063 100644 --- a/internal/gengapic/lro.go +++ b/internal/gengapic/lro.go @@ -49,7 +49,9 @@ func (g *generator) lroCall(servName string, m *descriptorpb.MethodDescriptorPro p(" var resp *%s.%s", outSpec.Name, outType.GetName()) p(" err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" resp, err = %s", g.grpcStubCall(m)) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", cloggrpc.ProtoMessageResponse(req))`, m.GetName()) p(" return err") p(" }, opts...)") p(" if err != nil {") diff --git a/internal/gengapic/paging.go b/internal/gengapic/paging.go index 42b0c0f3f..71622ef42 100644 --- a/internal/gengapic/paging.go +++ b/internal/gengapic/paging.go @@ -392,7 +392,9 @@ func (g *generator) pagingCall(servName string, m *descriptorpb.MethodDescriptor g.internalFetchSetup(outType, outSpec, pageSize, tok) p(" err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" resp, err = %s", g.grpcStubCall(m)) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", cloggrpc.ProtoMessageResponse(req))`, m.GetName()) p(" return err") p(" }, opts...)") p(" if err != nil {") diff --git a/internal/gengapic/stream.go b/internal/gengapic/stream.go index d8c710748..b6d0cd344 100644 --- a/internal/gengapic/stream.go +++ b/internal/gengapic/stream.go @@ -43,7 +43,9 @@ func (g *generator) noRequestStreamCall(servName string, s *descriptorpb.Service p(" err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" resp, err = c.%s.%s(ctx, settings.GRPC...)", grpcClientField(servName), m.GetName()) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", cloggrpc.ProtoMessageResponse(req))`, m.GetName()) p(" return err") p(" }, opts...)") p(" if err != nil {") @@ -83,7 +85,9 @@ func (g *generator) serverStreamCall(servName string, s *descriptorpb.ServiceDes p(" var resp %s", retTyp) p("err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {") p(" var err error") + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", %q, "request", cloggrpc.ProtoMessageRequest(ctx, req))`, m.GetName()) p(" resp, err = %s", g.grpcStubCall(m)) + p(` c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", %q, "response", cloggrpc.ProtoMessageResponse(req))`, m.GetName()) p(" return err") p("}, opts...)") p("if err != nil {") diff --git a/internal/gengapic/testdata/custom_op_init.want b/internal/gengapic/testdata/custom_op_init.want index 5ab35d283..9882006d2 100644 --- a/internal/gengapic/testdata/custom_op_init.want +++ b/internal/gengapic/testdata/custom_op_init.want @@ -63,6 +63,8 @@ type restClient struct { // Points back to the CallOptions field of the containing Client CallOptions **CallOptions + + logger *slog.Logger } // NewRESTClient creates a new foo rest client. diff --git a/internal/gengapic/testdata/deprecated_client_init.want b/internal/gengapic/testdata/deprecated_client_init.want index ff8f94001..5e1e0fb8d 100644 --- a/internal/gengapic/testdata/deprecated_client_init.want +++ b/internal/gengapic/testdata/deprecated_client_init.want @@ -64,6 +64,8 @@ type gRPCClient struct { // The x-goog-* metadata to be sent with each request. xGoogHeaders []string + + logger *slog.Logger } // NewClient creates a new foo client based on gRPC. @@ -139,6 +141,8 @@ type restClient struct { // Points back to the CallOptions field of the containing Client CallOptions **CallOptions + + logger *slog.Logger } // NewRESTClient creates a new foo rest client. diff --git a/internal/gengapic/testdata/doc_file.want b/internal/gengapic/testdata/doc_file.want index d32c5c289..ac6e147df 100644 --- a/internal/gengapic/testdata/doc_file.want +++ b/internal/gengapic/testdata/doc_file.want @@ -99,6 +99,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_alpha.want b/internal/gengapic/testdata/doc_file_alpha.want index 084202c99..56e3e37de 100644 --- a/internal/gengapic/testdata/doc_file_alpha.want +++ b/internal/gengapic/testdata/doc_file_alpha.want @@ -101,6 +101,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_alpha_emptyservice.want b/internal/gengapic/testdata/doc_file_alpha_emptyservice.want index 6e8d0094b..1cbe3af28 100644 --- a/internal/gengapic/testdata/doc_file_alpha_emptyservice.want +++ b/internal/gengapic/testdata/doc_file_alpha_emptyservice.want @@ -74,6 +74,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_beta.want b/internal/gengapic/testdata/doc_file_beta.want index 051cbac3b..8712bb9c6 100644 --- a/internal/gengapic/testdata/doc_file_beta.want +++ b/internal/gengapic/testdata/doc_file_beta.want @@ -101,6 +101,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_beta_emptyservice.want b/internal/gengapic/testdata/doc_file_beta_emptyservice.want index b294bdacb..61466053c 100644 --- a/internal/gengapic/testdata/doc_file_beta_emptyservice.want +++ b/internal/gengapic/testdata/doc_file_beta_emptyservice.want @@ -74,6 +74,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_deprecated_emptyservice.want b/internal/gengapic/testdata/doc_file_deprecated_emptyservice.want index 367cc2df8..54f093f01 100644 --- a/internal/gengapic/testdata/doc_file_deprecated_emptyservice.want +++ b/internal/gengapic/testdata/doc_file_deprecated_emptyservice.want @@ -74,6 +74,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/doc_file_emptyservice.want b/internal/gengapic/testdata/doc_file_emptyservice.want index 587108b69..07bcce34a 100644 --- a/internal/gengapic/testdata/doc_file_emptyservice.want +++ b/internal/gengapic/testdata/doc_file_emptyservice.want @@ -72,6 +72,7 @@ import ( "google.golang.org/api/option" ) +const serviceName = "secretmanager.googleapis.com" // For more information on implementing a client constructor hook, see // https://github.com/googleapis/google-cloud-go/wiki/Customizing-constructors. type clientHookParams struct{} diff --git a/internal/gengapic/testdata/empty_client_init.want b/internal/gengapic/testdata/empty_client_init.want index 1bafa2553..c6c9e5413 100644 --- a/internal/gengapic/testdata/empty_client_init.want +++ b/internal/gengapic/testdata/empty_client_init.want @@ -62,6 +62,8 @@ type gRPCClient struct { // The x-goog-* metadata to be sent with each request. xGoogHeaders []string + + logger *slog.Logger } // NewClient creates a new foo client based on gRPC. @@ -136,6 +138,8 @@ type restClient struct { // Points back to the CallOptions field of the containing Client CallOptions **CallOptions + + logger *slog.Logger } // NewRESTClient creates a new foo rest client. diff --git a/internal/gengapic/testdata/foo_client_init.want b/internal/gengapic/testdata/foo_client_init.want index e32c9eaa0..31a0277bf 100644 --- a/internal/gengapic/testdata/foo_client_init.want +++ b/internal/gengapic/testdata/foo_client_init.want @@ -91,6 +91,8 @@ type fooGRPCClient struct { // The x-goog-* metadata to be sent with each request. xGoogHeaders []string + + logger *slog.Logger } // NewFooClient creates a new foo client based on gRPC. diff --git a/internal/gengapic/testdata/foo_rest_client_init.want b/internal/gengapic/testdata/foo_rest_client_init.want index c24c9ef7a..e053ec056 100644 --- a/internal/gengapic/testdata/foo_rest_client_init.want +++ b/internal/gengapic/testdata/foo_rest_client_init.want @@ -85,6 +85,8 @@ type fooRESTClient struct { // Points back to the CallOptions field of the containing FooClient CallOptions **FooCallOptions + + logger *slog.Logger } // NewFooRESTClient creates a new foo rest client. diff --git a/internal/gengapic/testdata/lro_client_init.want b/internal/gengapic/testdata/lro_client_init.want index feb4dc2c9..9bef44d4e 100644 --- a/internal/gengapic/testdata/lro_client_init.want +++ b/internal/gengapic/testdata/lro_client_init.want @@ -106,6 +106,8 @@ type fooGRPCClient struct { // The x-goog-* metadata to be sent with each request. xGoogHeaders []string + + logger *slog.Logger } // NewFooClient creates a new foo client based on gRPC. diff --git a/internal/gengapic/testdata/method_BidiThings.want b/internal/gengapic/testdata/method_BidiThings.want index 7335ad111..7efeb242c 100644 --- a/internal/gengapic/testdata/method_BidiThings.want +++ b/internal/gengapic/testdata/method_BidiThings.want @@ -4,7 +4,9 @@ func (c *fooGRPCClient) BidiThings(ctx context.Context, opts ...gax.CallOption) opts = append((*c.CallOptions).BidiThings[0:len((*c.CallOptions).BidiThings):len((*c.CallOptions).BidiThings)], opts...) err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "BidiThings", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.BidiThings(ctx, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "BidiThings", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_ClientThings.want b/internal/gengapic/testdata/method_ClientThings.want index 51a3d2a9d..43d6a6dbf 100644 --- a/internal/gengapic/testdata/method_ClientThings.want +++ b/internal/gengapic/testdata/method_ClientThings.want @@ -4,7 +4,9 @@ func (c *fooGRPCClient) ClientThings(ctx context.Context, opts ...gax.CallOption opts = append((*c.CallOptions).ClientThings[0:len((*c.CallOptions).ClientThings):len((*c.CallOptions).ClientThings)], opts...) err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "ClientThings", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.ClientThings(ctx, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "ClientThings", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_EmptyLRO.want b/internal/gengapic/testdata/method_EmptyLRO.want index e07753269..d6748b773 100644 --- a/internal/gengapic/testdata/method_EmptyLRO.want +++ b/internal/gengapic/testdata/method_EmptyLRO.want @@ -4,7 +4,9 @@ func (c *fooGRPCClient) EmptyLRO(ctx context.Context, req *mypackagepb.InputType var resp *longrunningpb.Operation err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "EmptyLRO", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.EmptyLRO(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "EmptyLRO", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_GetAnotherThing.want b/internal/gengapic/testdata/method_GetAnotherThing.want index c51f14b55..5582ef611 100644 --- a/internal/gengapic/testdata/method_GetAnotherThing.want +++ b/internal/gengapic/testdata/method_GetAnotherThing.want @@ -34,7 +34,9 @@ func (c *fooGRPCClient) GetAnotherThing(ctx context.Context, req *mypackagepb.In var resp *mypackagepb.OutputType err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetAnotherThing", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.GetAnotherThing(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "GetAnotherThing", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_GetEmptyThing.want b/internal/gengapic/testdata/method_GetEmptyThing.want index eaf6c423f..12fef0dcb 100644 --- a/internal/gengapic/testdata/method_GetEmptyThing.want +++ b/internal/gengapic/testdata/method_GetEmptyThing.want @@ -9,7 +9,9 @@ func (c *fooGRPCClient) GetEmptyThing(ctx context.Context, req *mypackagepb.Inpu opts = append((*c.CallOptions).GetEmptyThing[0:len((*c.CallOptions).GetEmptyThing):len((*c.CallOptions).GetEmptyThing)], opts...) err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetEmptyThing", "request", cloggrpc.ProtoMessageRequest(ctx, req)) _, err = c.fooClient.GetEmptyThing(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api empty response", "serviceName", serviceName, "rpcName", "GetEmptyThing") return err }, opts...) return err diff --git a/internal/gengapic/testdata/method_GetManyOtherThings.want b/internal/gengapic/testdata/method_GetManyOtherThings.want index 0c402bd86..458a01719 100644 --- a/internal/gengapic/testdata/method_GetManyOtherThings.want +++ b/internal/gengapic/testdata/method_GetManyOtherThings.want @@ -15,7 +15,9 @@ func (c *fooGRPCClient) GetManyOtherThings(ctx context.Context, req *mypackagepb } err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetManyOtherThings", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.GetManyOtherThings(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "GetManyOtherThings", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_GetManyThings.want b/internal/gengapic/testdata/method_GetManyThings.want index 776da673b..61d5b6914 100644 --- a/internal/gengapic/testdata/method_GetManyThings.want +++ b/internal/gengapic/testdata/method_GetManyThings.want @@ -18,7 +18,9 @@ func (c *fooGRPCClient) GetManyThings(ctx context.Context, req *mypackagepb.Page } err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetManyThings", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.GetManyThings(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "GetManyThings", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_GetManyThingsOptional.want b/internal/gengapic/testdata/method_GetManyThingsOptional.want index 7d2761f76..e270ef327 100644 --- a/internal/gengapic/testdata/method_GetManyThingsOptional.want +++ b/internal/gengapic/testdata/method_GetManyThingsOptional.want @@ -18,7 +18,9 @@ func (c *fooGRPCClient) GetManyThingsOptional(ctx context.Context, req *mypackag } err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetManyThingsOptional", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.GetManyThingsOptional(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "GetManyThingsOptional", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_GetOneThing.want b/internal/gengapic/testdata/method_GetOneThing.want index 54ba5d7ea..e93165f3e 100644 --- a/internal/gengapic/testdata/method_GetOneThing.want +++ b/internal/gengapic/testdata/method_GetOneThing.want @@ -13,7 +13,9 @@ func (c *fooGRPCClient) GetOneThing(ctx context.Context, req *mypackagepb.InputT var resp *mypackagepb.OutputType err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "GetOneThing", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.GetOneThing(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "GetOneThing", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_RespLRO.want b/internal/gengapic/testdata/method_RespLRO.want index 558c52386..b6aa4d7a8 100644 --- a/internal/gengapic/testdata/method_RespLRO.want +++ b/internal/gengapic/testdata/method_RespLRO.want @@ -4,7 +4,9 @@ func (c *fooGRPCClient) RespLRO(ctx context.Context, req *mypackagepb.InputType, var resp *longrunningpb.Operation err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "RespLRO", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.RespLRO(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "RespLRO", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/method_ServerThings.want b/internal/gengapic/testdata/method_ServerThings.want index 75514616b..5f94be71f 100644 --- a/internal/gengapic/testdata/method_ServerThings.want +++ b/internal/gengapic/testdata/method_ServerThings.want @@ -7,7 +7,9 @@ func (c *fooGRPCClient) ServerThings(ctx context.Context, req *mypackagepb.Input var resp mypackagepb.Foo_ServerThingsClient err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { var err error + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "ServerThings", "request", cloggrpc.ProtoMessageRequest(ctx, req)) resp, err = c.fooClient.ServerThings(ctx, req, settings.GRPC...) + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "ServerThings", "response", cloggrpc.ProtoMessageResponse(req)) return err }, opts...) if err != nil { diff --git a/internal/gengapic/testdata/rest_CustomOp.want b/internal/gengapic/testdata/rest_CustomOp.want index faa858f72..ae3dd7d3e 100644 --- a/internal/gengapic/testdata/rest_CustomOp.want +++ b/internal/gengapic/testdata/rest_CustomOp.want @@ -33,6 +33,7 @@ func (c *fooRESTClient) CustomOp(ctx context.Context, req *foopb.Foo, opts ...ga httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "CustomOp", "request", clog.HTTPRequest(httpReq, nil)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -47,6 +48,7 @@ func (c *fooRESTClient) CustomOp(ctx context.Context, req *foopb.Foo, opts ...ga if err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "CustomOp", "response", clog.HTTPResponse(httpRsp, buf)) if err := unm.Unmarshal(buf, resp); err != nil { return err diff --git a/internal/gengapic/testdata/rest_EmptyRPC.want b/internal/gengapic/testdata/rest_EmptyRPC.want index 1cdcc023b..e03653326 100644 --- a/internal/gengapic/testdata/rest_EmptyRPC.want +++ b/internal/gengapic/testdata/rest_EmptyRPC.want @@ -33,11 +33,13 @@ func (c *fooRESTClient) EmptyRPC(ctx context.Context, req *foopb.Foo, opts ...ga httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "EmptyRPC", "request", clog.HTTPRequest(httpReq, nil)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err } defer httpRsp.Body.Close() + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "EmptyRPC", "response", clog.HTTPResponse(httpRsp, nil)) // Returns nil if there is no error, otherwise wraps // the response code and body into a non-nil error diff --git a/internal/gengapic/testdata/rest_HttpBodyRPC.want b/internal/gengapic/testdata/rest_HttpBodyRPC.want index 1e9e696fc..cc05f7936 100644 --- a/internal/gengapic/testdata/rest_HttpBodyRPC.want +++ b/internal/gengapic/testdata/rest_HttpBodyRPC.want @@ -39,6 +39,7 @@ func (c *fooRESTClient) HttpBodyRPC(ctx context.Context, req *foopb.Foo, opts .. httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "HttpBodyRPC", "request", clog.HTTPRequest(httpReq, jsonReq)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -53,6 +54,7 @@ func (c *fooRESTClient) HttpBodyRPC(ctx context.Context, req *foopb.Foo, opts .. if err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "HttpBodyRPC", "response", clog.HTTPResponse(httpRsp, buf)) resp.Data = buf if headers := httpRsp.Header; len(headers["Content-Type"]) > 0 { diff --git a/internal/gengapic/testdata/rest_LongrunningRPC.want b/internal/gengapic/testdata/rest_LongrunningRPC.want index 504a89a79..f000b3837 100644 --- a/internal/gengapic/testdata/rest_LongrunningRPC.want +++ b/internal/gengapic/testdata/rest_LongrunningRPC.want @@ -27,6 +27,7 @@ func (c *fooRESTClient) LongrunningRPC(ctx context.Context, req *foopb.Foo, opts httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "LongrunningRPC", "request", clog.HTTPRequest(httpReq, jsonReq)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -36,6 +37,7 @@ func (c *fooRESTClient) LongrunningRPC(ctx context.Context, req *foopb.Foo, opts if err = googleapi.CheckResponse(httpRsp); err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "LongrunningRPC", "response", clog.HTTPResponse(httpRsp, buf)) buf, err := io.ReadAll(httpRsp.Body) if err != nil { diff --git a/internal/gengapic/testdata/rest_PagingRPC.want b/internal/gengapic/testdata/rest_PagingRPC.want index f1d4e3beb..d54cccc8a 100644 --- a/internal/gengapic/testdata/rest_PagingRPC.want +++ b/internal/gengapic/testdata/rest_PagingRPC.want @@ -41,6 +41,7 @@ func (c *fooRESTClient) PagingRPC(ctx context.Context, req *foopb.PagedFooReques } httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "PagingRPC", "request", clog.HTTPRequest(httpReq, nil)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -55,6 +56,7 @@ func (c *fooRESTClient) PagingRPC(ctx context.Context, req *foopb.PagedFooReques if err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "PagingRPC", "response", clog.HTTPResponse(httpRsp, buf)) if err := unm.Unmarshal(buf, resp); err != nil { return err diff --git a/internal/gengapic/testdata/rest_ServerStreamRPC.want b/internal/gengapic/testdata/rest_ServerStreamRPC.want index 0511d21fb..d55e4ab58 100644 --- a/internal/gengapic/testdata/rest_ServerStreamRPC.want +++ b/internal/gengapic/testdata/rest_ServerStreamRPC.want @@ -38,6 +38,7 @@ func (c *fooRESTClient) ServerStreamRPC(ctx context.Context, req *foopb.Foo, opt httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "ServerStreamRPC", "request", clog.HTTPRequest(httpReq, jsonReq)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err diff --git a/internal/gengapic/testdata/rest_UnaryRPC.want b/internal/gengapic/testdata/rest_UnaryRPC.want index 473af58df..9ee8bc837 100644 --- a/internal/gengapic/testdata/rest_UnaryRPC.want +++ b/internal/gengapic/testdata/rest_UnaryRPC.want @@ -48,6 +48,7 @@ func (c *fooRESTClient) UnaryRPC(ctx context.Context, req *foopb.Foo, opts ...ga httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "UnaryRPC", "request", clog.HTTPRequest(httpReq, jsonReq)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -62,6 +63,7 @@ func (c *fooRESTClient) UnaryRPC(ctx context.Context, req *foopb.Foo, opts ...ga if err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "UnaryRPC", "response", clog.HTTPResponse(httpRsp, buf)) if err := unm.Unmarshal(buf, resp); err != nil { return err diff --git a/internal/gengapic/testdata/rest_UpdateRPC.want b/internal/gengapic/testdata/rest_UpdateRPC.want index 2c156d773..9b5c02d2a 100644 --- a/internal/gengapic/testdata/rest_UpdateRPC.want +++ b/internal/gengapic/testdata/rest_UpdateRPC.want @@ -53,6 +53,7 @@ func (c *fooRESTClient) UpdateRPC(ctx context.Context, req *foopb.UpdateRequest, httpReq = httpReq.WithContext(ctx) httpReq.Header = headers + c.logger.Log(ctx, clog.DynamicLevel(), "api request", "serviceName", serviceName, "rpcName", "UpdateRPC", "request", clog.HTTPRequest(httpReq, jsonReq)) httpRsp, err := c.httpClient.Do(httpReq) if err != nil{ return err @@ -67,6 +68,7 @@ func (c *fooRESTClient) UpdateRPC(ctx context.Context, req *foopb.UpdateRequest, if err != nil { return err } + c.logger.Log(ctx, clog.DynamicLevel(), "api response", "serviceName", serviceName, "rpcName", "UpdateRPC", "response", clog.HTTPResponse(httpRsp, buf)) if err := unm.Unmarshal(buf, resp); err != nil { return err