diff --git a/internal/devserver/log.go b/internal/devserver/log.go index a20cc952b..0a4e71e82 100644 --- a/internal/devserver/log.go +++ b/internal/devserver/log.go @@ -10,7 +10,7 @@ import ( type slogLogger struct { log *slog.Logger - level slog.Level + level *slog.LevelVar } var _ log.Logger = slogLogger{} @@ -31,7 +31,7 @@ func (s slogLogger) SLog() *slog.Logger { } func (s slogLogger) Log(level slog.Level, msg string, tags []tag.Tag) { - if level >= s.level && s.log.Enabled(context.Background(), level) { + if level >= s.level.Level() && s.log.Enabled(context.Background(), level) { s.log.LogAttrs(context.Background(), level, msg, logTagsToAttrs(tags)...) } } diff --git a/internal/devserver/server.go b/internal/devserver/server.go index 230107cfc..75b59bead 100644 --- a/internal/devserver/server.go +++ b/internal/devserver/server.go @@ -91,8 +91,9 @@ type StartOptions struct { } type Server struct { - server temporal.Server - ui *uiserver.Server + server temporal.Server + ui *uiserver.Server + logLevel *slog.LevelVar } func Start(options StartOptions) (*Server, error) { @@ -126,7 +127,7 @@ func Start(options StartOptions) (*Server, error) { if options.UIIP != "" { ui = options.buildUIServer() } - server, err := options.buildServer() + server, logLevel, err := options.buildServer() if err != nil { return nil, err } @@ -149,7 +150,7 @@ func Start(options StartOptions) (*Server, error) { } return nil, err } - return &Server{server, ui}, nil + return &Server{server: server, ui: ui, logLevel: logLevel}, nil } func (s *Server) Stop() { @@ -159,6 +160,12 @@ func (s *Server) Stop() { s.server.Stop() } +func (s *Server) SuppressWarnings() { + if s.logLevel != nil { + s.logLevel.Set(slog.LevelError) + } +} + func (s *StartOptions) buildUIServer() *uiserver.Server { return uiserver.NewServer(uiserveroptions.WithConfigProvider(&uiconfig.Config{ Host: MaybeEscapeIPv6(s.UIIP), @@ -173,19 +180,20 @@ func (s *StartOptions) buildUIServer() *uiserver.Server { })) } -func (s *StartOptions) buildServer() (temporal.Server, error) { - opts, err := s.buildServerOptions() +func (s *StartOptions) buildServer() (temporal.Server, *slog.LevelVar, error) { + opts, logLevel, err := s.buildServerOptions() if err != nil { - return nil, err + return nil, nil, err } - return temporal.NewServer(opts...) + server, err := temporal.NewServer(opts...) + return server, logLevel, err } -func (s *StartOptions) buildServerOptions() ([]temporal.ServerOption, error) { +func (s *StartOptions) buildServerOptions() ([]temporal.ServerOption, *slog.LevelVar, error) { // Build config and log it conf, err := s.buildServerConfig() if err != nil { - return nil, err + return nil, nil, err } else if s.LogConfig != nil { // We're going to marshal YAML if b, err := yaml.Marshal(conf); err != nil { @@ -196,17 +204,19 @@ func (s *StartOptions) buildServerOptions() ([]temporal.ServerOption, error) { } // Build common opts + logLevel := &slog.LevelVar{} + logLevel.Set(s.LogLevel) logger := slogLogger{ log: s.Logger, - level: s.LogLevel, + level: logLevel, } authorizer, err := authorization.GetAuthorizerFromConfig(&conf.Global.Authorization) if err != nil { - return nil, fmt.Errorf("failed creating authorizer: %w", err) + return nil, nil, fmt.Errorf("failed creating authorizer: %w", err) } claimMapper, err := authorization.GetClaimMapperFromConfig(&conf.Global.Authorization, logger) if err != nil { - return nil, fmt.Errorf("failed creating claim mapper: %w", err) + return nil, nil, fmt.Errorf("failed creating claim mapper: %w", err) } opts := []temporal.ServerOption{ temporal.WithConfig(conf), @@ -255,7 +265,7 @@ func (s *StartOptions) buildServerOptions() ([]temporal.ServerOption, error) { opts = append(opts, temporal.WithChainedFrontendGrpcInterceptors(s.GRPCInterceptors...)) } - return opts, nil + return opts, logLevel, nil } func (s *StartOptions) buildServerConfig() (*config.Config, error) { diff --git a/internal/temporalcli/commands.server.go b/internal/temporalcli/commands.server.go index 91af9d801..09b606eeb 100644 --- a/internal/temporalcli/commands.server.go +++ b/internal/temporalcli/commands.server.go @@ -165,7 +165,10 @@ func (t *TemporalServerStartDevCommand) run(cctx *CommandContext, args []string) } cctx.Printer.Printlnf("%-8s http://%v:%v/metrics", "Metrics:", toFriendlyIp(opts.FrontendIP), opts.MetricsPort) <-cctx.Done() - cctx.Printer.Println("Stopping server...") + if !t.Parent.Parent.LogLevel.ChangedFromDefault { + // The server routinely emits various warnings on shutdown. + s.SuppressWarnings() + } return nil }