Skip to content

Commit cbf6866

Browse files
committed
feat: add logging support
1 parent 4cdb1af commit cbf6866

31 files changed

+638
-237
lines changed

‎go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,4 @@ require (
3333
golang.org/x/crypto v0.31.0 // indirect
3434
golang.org/x/sys v0.28.0 // indirect
3535
golang.org/x/text v0.21.0 // indirect
36-
google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect
3736
)

‎go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
5151
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
5252
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
5353
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
54-
google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 h1:pgr/4QbFyktUv9CtQ/Fq4gzEE6/Xs7iCXbktaGzLHbQ=
55-
google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697/go.mod h1:+D9ySVjN8nY8YCVjc5O7PZDIdZporIDY3KaGfJunh88=
54+
google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g=
55+
google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4=
5656
google.golang.org/genproto/googleapis/bytestream v0.0.0-20241206012308-a4fef0638583 h1:QNxhiucJGWLF/fFpnyTIk8GdEGTa6tUC7/JYG7VN3XU=
5757
google.golang.org/genproto/googleapis/bytestream v0.0.0-20241206012308-a4fef0638583/go.mod h1:qUsLYwbwz5ostUWtuFuXPlHmSJodC5NI/88ZlHj4M1o=
5858
google.golang.org/genproto/googleapis/rpc v0.0.0-20241206012308-a4fef0638583 h1:IfdSdTcLFy4lqUQrQJLkLt1PB+AsqVz6lwkWPzWEz10=

‎go.work.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,8 @@ github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
674674
github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
675675
github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
676676
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
677+
github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o=
678+
github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk=
677679
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
678680
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
679681
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
@@ -704,6 +706,7 @@ go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40
704706
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
705707
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
706708
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
709+
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
707710
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
708711
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
709712
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=

‎google-api-go-generator/gen.go

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -809,6 +809,7 @@ func (a *API) GenerateCode() ([]byte, error) {
809809
"errors",
810810
"fmt",
811811
"io",
812+
"log/slog",
812813
"net/http",
813814
"net/url",
814815
"strconv",
@@ -820,6 +821,7 @@ func (a *API) GenerateCode() ([]byte, error) {
820821
if a.Name == "storage" {
821822
pn(" %q", "github.com/googleapis/gax-go/v2")
822823
}
824+
pn(" %q", "github.com/googleapis/gax-go/v2/internallog")
823825
for _, imp := range []struct {
824826
pkg string
825827
lname string
@@ -895,7 +897,10 @@ func (a *API) GenerateCode() ([]byte, error) {
895897

896898
pn("client, endpoint, err := htransport.NewClient(ctx, opts...)")
897899
pn("if err != nil { return nil, err }")
898-
pn("s, err := New(client)")
900+
pn("s := &%s{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}", service)
901+
for _, res := range a.doc.Resources { // add top level resources.
902+
pn("s.%s = New%s(s)", resourceGoField(res, nil), resourceGoType(res))
903+
}
899904
pn("if err != nil { return nil, err }")
900905
pn(`if endpoint != "" { s.BasePath = endpoint }`)
901906
pn("return s, nil")
@@ -908,15 +913,12 @@ func (a *API) GenerateCode() ([]byte, error) {
908913
pn("// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.")
909914
pn("func New(client *http.Client) (*%s, error) {", service)
910915
pn("if client == nil { return nil, errors.New(\"client is nil\") }")
911-
pn("s := &%s{client: client, BasePath: basePath}", service)
912-
for _, res := range a.doc.Resources { // add top level resources.
913-
pn("s.%s = New%s(s)", resourceGoField(res, nil), resourceGoType(res))
914-
}
915-
pn("return s, nil")
916+
pn("return NewService(option.WithHTTPClient(client))")
916917
pn("}")
917918

918919
pn("\ntype %s struct {", service)
919920
pn(" client *http.Client")
921+
pn(" logger *slog.Logger")
920922
pn(" BasePath string // API endpoint base URL")
921923
pn(" UserAgent string // optional additional User-Agent fragment")
922924

@@ -995,6 +997,7 @@ func splitFileHeading(w io.Writer, pkg string) {
995997
"context",
996998
"fmt",
997999
"io",
1000+
"log/slog",
9981001
"net/http",
9991002
} {
10001003
pn(" %q", imp)
@@ -2280,26 +2283,32 @@ func (meth *Method) generateCode() {
22802283
pn("}")
22812284
}
22822285
pn("var body io.Reader = nil")
2286+
var hasBody bool
22832287
if meth.IsRawRequest() {
2284-
pn("body = c.body_")
2288+
pn("body := bytes.NewBuffer(nil)")
2289+
pn("_, err := body.ReadFrom(c.body_)")
2290+
pn("if err != nil { return nil, err }")
2291+
hasBody = true
22852292
} else if meth.IsProtoStructRequest() {
22862293
pn("protoBytes, err := json.Marshal(c.req)")
22872294
pn("if err != nil { return nil, err }")
2288-
pn("body = bytes.NewReader(protoBytes)")
2295+
pn("body := bytes.NewReader(protoBytes)")
2296+
hasBody = true
22892297
} else {
22902298
if ba := args.bodyArg(); ba != nil && httpMethod != "GET" {
22912299
if meth.m.ID == "ml.projects.predict" {
22922300
// TODO(cbro): move ML API to rawHTTP (it will be a breaking change)
2293-
// Skip JSONReader for APIs that require clients to pass in JSON already.
2294-
pn("body = strings.NewReader(c.%s.HttpBody.Data)", ba.goname)
2301+
// Skip JSONBuffer for APIs that require clients to pass in JSON already.
2302+
pn("body := bytes.NewBufferString(c.%s.HttpBody.Data)", ba.goname)
22952303
} else {
22962304
style := "WithoutDataWrapper"
22972305
if a.needsDataWrapper() {
22982306
style = "WithDataWrapper"
22992307
}
2300-
pn("body, err := googleapi.%s.JSONReader(c.%s)", style, ba.goname)
2308+
pn("body, err := googleapi.%s.JSONBuffer(c.%s)", style, ba.goname)
23012309
pn("if err != nil { return nil, err }")
23022310
}
2311+
hasBody = true
23032312
}
23042313
pn(`c.urlParams_.Set("alt", alt)`)
23052314
pn(`c.urlParams_.Set("prettyPrint", "false")`)
@@ -2337,12 +2346,18 @@ func (meth *Method) generateCode() {
23372346
}
23382347
pn(`})`)
23392348
}
2349+
logBody := "nil"
2350+
if hasBody {
2351+
logBody = "body.Bytes()"
2352+
}
23402353
if meth.supportsMediaUpload() && meth.api.Name == "storage" {
2354+
pn(`c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", %q, "request", internallog.HTTPRequest(req, %s))`, meth.Id(), logBody)
23412355
pn("if c.retry != nil {")
23422356
pn(" return gensupport.SendRequestWithRetry(c.ctx_, c.s.client, req, c.retry)")
23432357
pn("}")
23442358
pn("return gensupport.SendRequest(c.ctx_, c.s.client, req)")
23452359
} else {
2360+
pn(`c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", %q, "request", internallog.HTTPRequest(req, %s))`, meth.Id(), logBody)
23462361
pn("return gensupport.SendRequest(c.ctx_, c.s.client, req)")
23472362
}
23482363
pn("}")
@@ -2421,6 +2436,7 @@ func (meth *Method) generateCode() {
24212436
pn("}")
24222437
}
24232438
if retTypeComma == "" {
2439+
pn(`c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", %q, "response", internallog.HTTPResponse(res, nil))`, meth.Id())
24242440
pn("return nil")
24252441
} else {
24262442
if meth.IsProtoStructResponse() {
@@ -2449,8 +2465,11 @@ func (meth *Method) generateCode() {
24492465
pn("if err := res.Body.Close(); err != nil { return nil, err }")
24502466
pn("if err := json.NewDecoder(bytes.NewReader(b.Bytes())).Decode(target); err != nil { return nil, err }")
24512467
pn("ret.Data = b.String()")
2468+
pn(`c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", %q, "response", internallog.HTTPResponse(res, b.Bytes()))`, meth.Id())
24522469
} else {
2453-
pn("if err := gensupport.DecodeResponse(target, res); err != nil { return nil, err }")
2470+
pn("b, err := gensupport.DecodeResponseBytes(target, res)")
2471+
pn("if err != nil { return nil, err }")
2472+
pn(`c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", %q, "response", internallog.HTTPResponse(res, b))`, meth.Id())
24542473
}
24552474
pn("return ret, nil")
24562475
}

0 commit comments

Comments
 (0)