Logging
The Go SDK uses the standard library log/slog
package for logging.
By default logs will go to the slog default handler. However, you may provide any slog handler upon creating the Restate server instance, which allows you to direct the logs to other log libraries:
myHandler := slog.NewJSONHandler(os.Stdout, nil)server.NewRestate(). WithLogger(myHandler, true). Bind(restate.Reflect(Monitoring{})). Start(context.Background(), "0.0.0.0:9080")
Avoiding duplicate logging
If you use the default slog logger or another logger, log statements will be
printed over and over again during replays.
To avoid this, you can use the Restate context logger, which is a
*slog.Logger
that suppresses duplicate log statements during replays:
ctx.Log().Info("This will not be printed again during replays")ctx.Log().Debug("This will not be printed again during replays")
When providing a custom log handler using
WithLogger
,
you can provide false
as the second argument, in which case logs will not be
dropped during replay allowing you to handle them as you prefer. You can still
determine whether they would have been dropped using
rcontext.LogContextFrom
on the context passed to your log handler.