diff --git a/internal/gengapic/client_init_test.go b/internal/gengapic/client_init_test.go index 74209f2a..b4a30e74 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 af7a6d18..509e0e96 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 9857e11c..52f762f1 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 b9bf409b..a4cde12d 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 71bcecf6..984c2806 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 42b0c0f3..71622ef4 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 d8c71074..b6d0cd34 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 5ab35d28..9882006d 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 ff8f9400..5e1e0fb8 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 d32c5c28..ac6e147d 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 084202c9..56e3e37d 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 6e8d0094..1cbe3af2 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 051cbac3..8712bb9c 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 b294bdac..61466053 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 367cc2df..54f093f0 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 587108b6..07bcce34 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 1bafa255..c6c9e541 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 e32c9eaa..31a0277b 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 c24c9ef7..e053ec05 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 feb4dc2c..9bef44d4 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 7335ad11..7efeb242 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 51a3d2a9..43d6a6db 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 e0775326..d6748b77 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 c51f14b5..5582ef61 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 eaf6c423..12fef0dc 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 0c402bd8..458a0171 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 776da673..61d5b691 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 7d2761f7..e270ef32 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 54ba5d7e..e93165f3 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 558c5238..b6aa4d7a 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 75514616..5f94be71 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 faa858f7..ae3dd7d3 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 1cdcc023..e0365332 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 1e9e696f..cc05f793 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 504a89a7..f000b383 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 f1d4e3be..d54cccc8 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 0511d21f..d55e4ab5 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 473af58d..9ee8bc83 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 2c156d77..9b5c02d2 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