Skip to content

Commit

Permalink
update slog dependency (ServiceWeaver#250)
Browse files Browse the repository at this point in the history
  • Loading branch information
rgrandl committed Apr 13, 2023
1 parent 35860ee commit 9797c7f
Show file tree
Hide file tree
Showing 14 changed files with 49 additions and 50 deletions.
4 changes: 2 additions & 2 deletions component.go
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ type AutoMarshal struct{}
// codegen.AutoMarshal. Alternatively, we could modify the code generator to
// ignore AutoMarshal during marshaling and unmarshaling.

func (AutoMarshal) WeaverMarshal(enc *codegen.Encoder) {}
func (AutoMarshal) WeaverUnmarshal(dec *codegen.Decoder) {}
func (AutoMarshal) WeaverMarshal(*codegen.Encoder) {}
func (AutoMarshal) WeaverUnmarshal(*codegen.Decoder) {}

// WithConfig[T] is a type that can be embedded inside a component
// implementation. Service Weaver runtime will take per-component configuration
Expand Down
2 changes: 1 addition & 1 deletion examples/onlineboutique/checkoutservice/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func (s *impl) PlaceOrder(ctx context.Context, req PlaceOrderRequest) (types.Ord
}

if err := s.emailService.SendOrderConfirmation(ctx, req.Email, order); err != nil {
s.Logger().Error("failed to send order confirmation", err, "email", req.Email)
s.Logger().Error("failed to send order confirmation", "err", err, "email", req.Email)
} else {
s.Logger().Info("order confirmation email sent", "email", req.Email)
}
Expand Down
14 changes: 7 additions & 7 deletions examples/onlineboutique/frontend/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func (fe *Server) homeHandler(w http.ResponseWriter, r *http.Request) {
"platform_name": fe.platform.provider,
"is_cymbal_brand": isCymbalBrand,
}); err != nil {
logger.Error("generate home page", err)
logger.Error("generate home page", "err", err)
}
}

Expand Down Expand Up @@ -175,7 +175,7 @@ func (fe *Server) productHandler(w http.ResponseWriter, r *http.Request) {
"platform_name": fe.platform.provider,
"is_cymbal_brand": isCymbalBrand,
}); err != nil {
logger.Error("generate product page", err)
logger.Error("generate product page", "err", err)
}
}

Expand Down Expand Up @@ -303,7 +303,7 @@ func (fe *Server) viewCartHandler(w http.ResponseWriter, r *http.Request) {
"platform_name": fe.platform.provider,
"is_cymbal_brand": isCymbalBrand,
}); err != nil {
logger.Error("generate cart page", err)
logger.Error("generate cart page", "err", err)
}
}

Expand Down Expand Up @@ -374,7 +374,7 @@ func (fe *Server) placeOrderHandler(w http.ResponseWriter, r *http.Request) {
"platform_name": fe.platform.provider,
"is_cymbal_brand": isCymbalBrand,
}); err != nil {
logger.Error("generate order page", err)
logger.Error("generate order page", "err", err)
}
}

Expand Down Expand Up @@ -417,7 +417,7 @@ func (fe *Server) chooseAd(ctx context.Context, ctxKeys []string, logger *slog.L
defer cancel()
ads, err := fe.adService.GetAds(ctx, ctxKeys)
if err != nil {
logger.Error("failed to retrieve ads", err)
logger.Error("failed to retrieve ads", "err", err)
return nil
}
return &ads[rand.Intn(len(ads))]
Expand Down Expand Up @@ -473,7 +473,7 @@ func (fe *Server) getRecommendations(ctx context.Context, userID string, product

func (fe *Server) renderHTTPError(r *http.Request, w http.ResponseWriter, err error, code int) {
logger := r.Context().Value(ctxKeyLogger{}).(*slog.Logger)
logger.Error("request error", err)
logger.Error("request error", "err", err)
errMsg := fmt.Sprintf("%+v", err)

w.WriteHeader(code)
Expand All @@ -486,7 +486,7 @@ func (fe *Server) renderHTTPError(r *http.Request, w http.ResponseWriter, err er
"status_code": code,
"status": http.StatusText(code),
}); templateErr != nil {
logger.Error("generate error page", templateErr)
logger.Error("generate error page", "err", templateErr)
}
}

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ require (
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0
go.opentelemetry.io/otel/sdk v1.11.1
go.opentelemetry.io/otel/trace v1.13.0
golang.org/x/exp v0.0.0-20230206171751-46f607a40771
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
golang.org/x/image v0.5.0
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ go.opentelemetry.io/otel/trace v1.13.0 h1:CBgRZ6ntv+Amuj1jDsMhZtlAPT6gbyIRdaIzFh
go.opentelemetry.io/otel/trace v1.13.0/go.mod h1:muCvmmO9KKpvuXSf3KKAXXB2ygNYHQ+ZfI5X08d3tds=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg=
golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI=
golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
Expand Down
2 changes: 1 addition & 1 deletion internal/net/call/call.go
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,6 @@ func logError(logger *slog.Logger, details string, err error) {
errors.Is(err, io.ErrClosedPipe) {
logger.Info(details, "err", err)
} else {
logger.Error(details, err)
logger.Error(details, "err", err)
}
}
2 changes: 1 addition & 1 deletion internal/tool/multi/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ func (d *deployer) ExportListener(_ context.Context, req *protos.ExportListenerR
}
go func() {
if err := serveHTTP(d.ctx, lis, proxy); err != nil {
d.logger.Error("proxy", err)
d.logger.Error("proxy", "err", err)
}
}()
return &protos.ExportListenerReply{ProxyAddress: addr}, nil
Expand Down
14 changes: 7 additions & 7 deletions internal/tool/ssh/impl/babysitter.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ func RunBabysitter(ctx context.Context) error {
winfo := e.WeaveletInfo()
if err := checkVersion(winfo.Version); err != nil {
// TODO: Propagate the error and stop the deployer.
b.logger.Error("version mismatch", err)
b.logger.Error("version mismatch", "err", err)
return err
}

Expand Down Expand Up @@ -157,7 +157,7 @@ func (m *metricsCollector) run(ctx context.Context) {
case <-tickerCollectMetrics.C:
ms, err := m.envelope.GetMetrics()
if err != nil {
m.logger.Error("Unable to collect metrics", err)
m.logger.Error("Unable to collect metrics", "err", err)
continue
}
ms = append(ms, metrics.Snapshot()...)
Expand All @@ -177,7 +177,7 @@ func (m *metricsCollector) run(ctx context.Context) {
Metrics: metrics,
},
}); err != nil {
m.logger.Error("Error collecting metrics", err)
m.logger.Error("Error collecting metrics", "err", err)
}
case <-ctx.Done():
return
Expand Down Expand Up @@ -274,12 +274,12 @@ func (b *babysitter) watchRoutingInfo(component string, routed bool) {
for r := retry.Begin(); r.Continue(b.ctx); {
routing, newVersion, err := b.getRoutingInfo(component, routed, version)
if err != nil {
b.logger.Error("cannot get routing info; will retry", err, "component", component)
b.logger.Error("cannot get routing info; will retry", "err", err, "component", component)
continue
}
version = newVersion
if err := b.envelope.UpdateRoutingInfo(routing); err != nil {
b.logger.Error("cannot update routing info; will retry", err, "component", component)
b.logger.Error("cannot update routing info; will retry", "err", err, "component", component)
continue
}
if routing.Local {
Expand Down Expand Up @@ -311,12 +311,12 @@ func (b *babysitter) watchComponents() {
for r := retry.Begin(); r.Continue(b.ctx); {
components, newVersion, err := b.getComponentsToStart(version)
if err != nil {
b.logger.Error("cannot get components to start; will retry", err)
b.logger.Error("cannot get components to start; will retry", "err", err)
continue
}
version = newVersion
if err := b.envelope.UpdateComponents(components); err != nil {
b.logger.Error("cannot update components to start; will retry", err)
b.logger.Error("cannot update components to start; will retry", "err", err)
continue
}
r.Reset()
Expand Down
10 changes: 5 additions & 5 deletions internal/tool/ssh/impl/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func RunManager(ctx context.Context, dep *protos.Deployment, locations []string,
// Run the manager.
go func() {
if err := m.run(); err != nil {
m.logger.Error("Unable to run the manager", err)
m.logger.Error("Unable to run the manager", "err", err)
}
}()

Expand All @@ -216,7 +216,7 @@ func RunManager(ctx context.Context, dep *protos.Deployment, locations []string,
return result
})
if err != nil {
m.logger.Error("Unable to collect metrics", err)
m.logger.Error("Unable to collect metrics", "err", err)
}
}()

Expand Down Expand Up @@ -244,7 +244,7 @@ func (m *manager) run() error {

go func() {
if err := serveHTTP(m.ctx, lis, mux); err != nil {
m.logger.Error("Unable to start HTTP server", err)
m.logger.Error("Unable to start HTTP server", "err", err)
}
}()

Expand All @@ -262,7 +262,7 @@ func (m *manager) run() error {
if err == nil {
break
}
m.logger.Error("Error starting status server", err, "address", lis.Addr())
m.logger.Error("Error starting status server", "err", err, "address", lis.Addr())
}

// Register the deployment.
Expand Down Expand Up @@ -513,7 +513,7 @@ func (m *manager) exportListener(_ context.Context, req *protos.ExportListenerRe
}
go func() {
if err := serveHTTP(m.ctx, lis, proxy); err != nil {
m.logger.Error("Proxy", err)
m.logger.Error("Proxy", "err", err)
}
}()
return &protos.ExportListenerReply{ProxyAddress: addr}, nil
Expand Down
2 changes: 1 addition & 1 deletion runtime/logging/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ type LogHandler struct {
var _ slog.Handler = &LogHandler{}

// Handle implements the slog.Handler interface.
func (h *LogHandler) Handle(rec slog.Record) error {
func (h *LogHandler) Handle(ctx context.Context, rec slog.Record) error {
h.Write(h.makeEntry(rec))
return nil
}
Expand Down
12 changes: 6 additions & 6 deletions runtime/protomsg/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@ func HandlerFunc[I, O any, IP ProtoPointer[I], OP ProtoPointer[O]](logger *slog.
f := func(w http.ResponseWriter, r *http.Request) {
var in I
if err := fromHTTP(w, r, IP(&in)); err != nil {
logger.Error("parse http request", err, "method", r.Method, "url", r.URL)
logger.Error("parse http request", "err", err, "method", r.Method, "url", r.URL)
return
}
out, err := handler(r.Context(), &in)
if err != nil {
httpRequestErrorCounts.Get(errorLabels{r.URL.Path, "execute request"}).Add(1.0)
logger.Error("handle http RPC", err, "method", r.Method, "url", r.URL)
logger.Error("handle http RPC", "err", err, "method", r.Method, "url", r.URL)
http.Error(w, err.Error(), http.StatusBadRequest)
return
} else {
Expand All @@ -117,7 +117,7 @@ func HandlerThunk[O any, OP ProtoPointer[O]](logger *slog.Logger, handler func(c
out, err := handler(r.Context())
if err != nil {
httpRequestErrorCounts.Get(errorLabels{r.URL.Path, "execute request"}).Add(1.0)
logger.Error("handle http RPC", err, "method", r.Method, "url", r.URL)
logger.Error("handle http RPC", "err", err, "method", r.Method, "url", r.URL)
http.Error(w, err.Error(), http.StatusBadRequest)
return
} else {
Expand All @@ -136,12 +136,12 @@ func HandlerDo[I any, IP ProtoPointer[I]](logger *slog.Logger, handler func(cont
f := func(w http.ResponseWriter, r *http.Request) {
var in I
if err := fromHTTP(w, r, IP(&in)); err != nil {
logger.Error("parse http request", err, "method", r.Method, "url", r.URL)
logger.Error("parse http request", "err", err, "method", r.Method, "url", r.URL)
return
}
if err := handler(r.Context(), &in); err != nil {
httpRequestErrorCounts.Get(errorLabels{r.URL.Path, "execute request"}).Add(1.0)
logger.Error("handle http RPC", err, "method", r.Method, "url", r.URL)
logger.Error("handle http RPC", "err", err, "method", r.Method, "url", r.URL)
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
Expand All @@ -156,7 +156,7 @@ func panicHandler(logger *slog.Logger, handler http.HandlerFunc) http.HandlerFun
defer func() {
if err := recover(); err != nil {
err := fmt.Errorf("%s:\n%v", err, string(debug.Stack()))
logger.Error("panic in HTTP handler", err)
logger.Error("panic in HTTP handler", "err", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
Expand Down
4 changes: 2 additions & 2 deletions singleprocess.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func newSingleprocessEnv(bootstrap runtime.Bootstrap) (*singleprocessEnv, error)
go func() {
err := env.statsProcessor.CollectMetrics(ctx, metrics.Snapshot)
if err != nil {
env.SystemLogger().Error("metric collection stopped with error", err)
env.SystemLogger().Error("metric collection stopped with error", "err", err)
}
}()
return env, nil
Expand Down Expand Up @@ -182,7 +182,7 @@ func (e *singleprocessEnv) serveStatus(ctx context.Context) error {
if err == nil {
break
}
e.SystemLogger().Error("status server unavailable", err, "address", lis.Addr())
e.SystemLogger().Error("status server unavailable", "err", err, "address", lis.Addr())
}

// Register the deployment.
Expand Down
25 changes: 12 additions & 13 deletions weavelet.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func (w *weavelet) start() (Instance, error) {
if single, ok := w.env.(*singleprocessEnv); ok {
go func() {
if err := single.serveStatus(w.ctx); err != nil {
single.SystemLogger().Error("status server", err)
single.SystemLogger().Error("status server", "err", err)
}
}()
}
Expand Down Expand Up @@ -319,7 +319,7 @@ func (w *weavelet) getInstance(c *component, requester string) (interface{}, err
return w.env.ActivateComponent(w.ctx, c.info.Name, c.info.Routed)
})
if c.registerErr != nil {
w.env.SystemLogger().Error("Registering component failed", c.registerErr, "component", c.info.Name)
w.env.SystemLogger().Error("Registering component failed", "err", c.registerErr, "component", c.info.Name)
} else {
w.env.SystemLogger().Debug("Registering component succeeded", "component", c.info.Name)
}
Expand Down Expand Up @@ -456,19 +456,18 @@ func (w *weavelet) UpdateComponents(req *protos.UpdateComponentsRequest) (*proto

// UpdateRoutingInfo implements the conn.WeaverHandler interface.
func (w *weavelet) UpdateRoutingInfo(req *protos.UpdateRoutingInfoRequest) (reply *protos.UpdateRoutingInfoReply, err error) {
// TODO(rgrandl): After we switch to slog, call With here to avoid
// repeating the same attributes again and again.
attrs := []any{
logger := w.env.SystemLogger().With(
"component", req.RoutingInfo.Component,
"local", req.RoutingInfo.Local,
"replicas", req.RoutingInfo.Replicas,
}
w.env.SystemLogger().Debug("Updating routing info...", attrs...)
)

logger.Debug("Updating routing info...")
defer func() {
if err != nil {
w.env.SystemLogger().Error("Updating routing info failed", err, attrs...)
logger.Error("Updating routing info failed", "err", err)
} else {
w.env.SystemLogger().Debug("Updating routing info succeeded", attrs...)
logger.Debug("Updating routing info succeeded")
}
}()

Expand Down Expand Up @@ -542,15 +541,15 @@ func (w *weavelet) getImpl(c *component) (*componentImpl, error) {

w.env.SystemLogger().Debug("Constructing component", "component", c.info.Name)
if err := createComponent(w.ctx, c); err != nil {
w.env.SystemLogger().Error("Constructing component failed", err, "component", c.info.Name)
w.env.SystemLogger().Error("Constructing component failed", "err", err, "component", c.info.Name)
return err
}
w.env.SystemLogger().Debug("Constructing component succeeded", "component", c.info.Name)

c.impl.serverStub = c.info.ServerStubFn(c.impl.impl, func(key uint64, v float64) {
if c.info.Routed {
if err := c.load.add(key, v); err != nil {
c.logger.Error("add load", err, "component", c.info.Name, "key", key)
c.logger.Error("add load", "err", err, "component", c.info.Name, "key", key)
}
}
})
Expand Down Expand Up @@ -591,7 +590,7 @@ func createComponent(ctx context.Context, c *component) error {
func (w *weavelet) repeatedly(errMsg string, f func() error) error {
for r := retry.Begin(); r.Continue(w.ctx); {
if err := f(); err != nil {
w.env.SystemLogger().Error(errMsg+"; will retry", err)
w.env.SystemLogger().Error(errMsg+"; will retry", "err", err)
continue
}
return nil
Expand All @@ -606,7 +605,7 @@ func (w *weavelet) getStub(c *component) (*componentStub, error) {
w.env.SystemLogger().Debug("Getting TCP client to component...", "component", c.info.Name)
client := w.getTCPClient(c.info.Name)
if err := client.init(w.ctx, w.transport.clientOpts); err != nil {
w.env.SystemLogger().Error("Getting TCP client to component failed", err, "component", c.info.Name)
w.env.SystemLogger().Error("Getting TCP client to component failed", "err", err, "component", c.info.Name)
return err
}
w.env.SystemLogger().Debug("Getting TCP client to component succeeded", "component", c.info.Name)
Expand Down
2 changes: 1 addition & 1 deletion weavertest/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func newDeployer(ctx context.Context, t testing.TB, wlet *protos.EnvelopeInfo, c

t.Cleanup(func() {
if err := d.cleanup(); err != nil {
d.logger.Error("cleanup", err)
d.logger.Error("cleanup", "err", err)
}
maybeLogStacks()

Expand Down

0 comments on commit 9797c7f

Please sign in to comment.