diff --git a/cmd/dex/serve.go b/cmd/dex/serve.go index fe0304e1..640b122a 100644 --- a/cmd/dex/serve.go +++ b/cmd/dex/serve.go @@ -180,6 +180,9 @@ func serve(cmd *cobra.Command, args []string) error { logger.Infof("config skipping approval screen") } + // explicitly convert to UTC. + now := func() time.Time { return time.Now().UTC() } + serverConfig := server.Config{ SupportedResponseTypes: c.OAuth2.ResponseTypes, SkipApprovalScreen: c.OAuth2.SkipApprovalScreen, @@ -189,6 +192,7 @@ func serve(cmd *cobra.Command, args []string) error { Web: c.Frontend, EnablePasswordDB: c.EnablePasswordDB, Logger: logger, + Now: now, } if c.Expiry.SigningKeys != "" { signingKeys, err := time.ParseDuration(c.Expiry.SigningKeys) @@ -251,6 +255,15 @@ var ( logFormats = []string{"json", "text"} ) +type utcFormatter struct { + f logrus.Formatter +} + +func (f *utcFormatter) Format(e *logrus.Entry) ([]byte, error) { + e.Time = e.Time.UTC() + return f.f.Format(e) +} + func newLogger(level string, format string) (logrus.FieldLogger, error) { var logLevel logrus.Level switch strings.ToLower(level) { @@ -264,19 +277,19 @@ func newLogger(level string, format string) (logrus.FieldLogger, error) { return nil, fmt.Errorf("log level is not one of the supported values (%s): %s", strings.Join(logLevels, ", "), level) } - var formatter logrus.Formatter + var formatter utcFormatter switch strings.ToLower(format) { case "", "text": - formatter = &logrus.TextFormatter{DisableColors: true} + formatter.f = &logrus.TextFormatter{DisableColors: true} case "json": - formatter = &logrus.JSONFormatter{} + formatter.f = &logrus.JSONFormatter{} default: return nil, fmt.Errorf("log format is not one of the supported values (%s): %s", strings.Join(logFormats, ", "), format) } return &logrus.Logger{ Out: os.Stderr, - Formatter: formatter, + Formatter: &formatter, Level: logLevel, }, nil }