cmd/dex: add logging config and serve logger for different modules.
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/coreos/dex/connector"
|
||||
"github.com/coreos/dex/connector/github"
|
||||
"github.com/coreos/dex/connector/ldap"
|
||||
@@ -29,6 +30,7 @@ type Config struct {
|
||||
OAuth2 OAuth2 `json:"oauth2"`
|
||||
GRPC GRPC `json:"grpc"`
|
||||
Expiry Expiry `json:"expiry"`
|
||||
Logger Logger `json:"logger"`
|
||||
|
||||
Frontend server.WebConfig `json:"frontend"`
|
||||
|
||||
@@ -119,7 +121,7 @@ type Storage struct {
|
||||
|
||||
// StorageConfig is a configuration that can create a storage.
|
||||
type StorageConfig interface {
|
||||
Open() (storage.Storage, error)
|
||||
Open(logrus.FieldLogger) (storage.Storage, error)
|
||||
}
|
||||
|
||||
var storages = map[string]func() StorageConfig{
|
||||
@@ -170,7 +172,7 @@ type Connector struct {
|
||||
|
||||
// ConnectorConfig is a configuration that can open a connector.
|
||||
type ConnectorConfig interface {
|
||||
Open() (connector.Connector, error)
|
||||
Open(logrus.FieldLogger) (connector.Connector, error)
|
||||
}
|
||||
|
||||
var connectors = map[string]func() ConnectorConfig{
|
||||
@@ -223,3 +225,12 @@ type Expiry struct {
|
||||
// IdTokens defines the duration of time for which the IdTokens will be valid.
|
||||
IDTokens string `json:"idTokens"`
|
||||
}
|
||||
|
||||
// Logger holds configuration required to customize logging for dex.
|
||||
type Logger struct {
|
||||
// Level sets logging level severity.
|
||||
Level string `json:"level"`
|
||||
|
||||
// Format specifies the format to be used for logging.
|
||||
Format string `json:"format"`
|
||||
}
|
||||
|
@@ -59,6 +59,10 @@ staticPasswords:
|
||||
expiry:
|
||||
signingKeys: "6h"
|
||||
idTokens: "24h"
|
||||
|
||||
logger:
|
||||
level: "debug"
|
||||
format: "json"
|
||||
`)
|
||||
|
||||
want := Config{
|
||||
@@ -120,6 +124,10 @@ expiry:
|
||||
SigningKeys: "6h",
|
||||
IDTokens: "24h",
|
||||
},
|
||||
Logger: Logger{
|
||||
Level: "debug",
|
||||
Format: "json",
|
||||
},
|
||||
}
|
||||
|
||||
var c Config
|
||||
|
@@ -9,8 +9,11 @@ import (
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/ghodss/yaml"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/net/context"
|
||||
@@ -111,6 +114,8 @@ func serve(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
|
||||
logger, _ := newLogger(c.Logger.Level, c.Logger.Format)
|
||||
|
||||
connectors := make([]server.Connector, len(c.Connectors))
|
||||
for i, conn := range c.Connectors {
|
||||
if conn.ID == "" {
|
||||
@@ -119,7 +124,8 @@ func serve(cmd *cobra.Command, args []string) error {
|
||||
if conn.Config == nil {
|
||||
return fmt.Errorf("no config field for connector %q", conn.ID)
|
||||
}
|
||||
c, err := conn.Config.Open()
|
||||
connectorLogger := logger.WithField("connector", conn.Name)
|
||||
c, err := conn.Config.Open(connectorLogger)
|
||||
if err != nil {
|
||||
return fmt.Errorf("open %s: %v", conn.ID, err)
|
||||
}
|
||||
@@ -130,7 +136,7 @@ func serve(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
}
|
||||
|
||||
s, err := c.Storage.Config.Open()
|
||||
s, err := c.Storage.Config.Open(logger)
|
||||
if err != nil {
|
||||
return fmt.Errorf("initializing storage: %v", err)
|
||||
}
|
||||
@@ -153,6 +159,7 @@ func serve(cmd *cobra.Command, args []string) error {
|
||||
Storage: s,
|
||||
Web: c.Frontend,
|
||||
EnablePasswordDB: c.EnablePasswordDB,
|
||||
Logger: logger,
|
||||
}
|
||||
if c.Expiry.SigningKeys != "" {
|
||||
signingKeys, err := time.ParseDuration(c.Expiry.SigningKeys)
|
||||
@@ -203,3 +210,33 @@ func serve(cmd *cobra.Command, args []string) error {
|
||||
|
||||
return <-errc
|
||||
}
|
||||
|
||||
func newLogger(level string, format string) (logrus.FieldLogger, error) {
|
||||
var logLevel logrus.Level
|
||||
switch strings.ToLower(level) {
|
||||
case "debug":
|
||||
logLevel = logrus.DebugLevel
|
||||
case "", "info":
|
||||
logLevel = logrus.InfoLevel
|
||||
case "error":
|
||||
logLevel = logrus.ErrorLevel
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported logLevel: %s", level)
|
||||
}
|
||||
|
||||
var formatter logrus.Formatter
|
||||
switch strings.ToLower(format) {
|
||||
case "", "text":
|
||||
formatter = &logrus.TextFormatter{DisableColors: true}
|
||||
case "json":
|
||||
formatter = &logrus.JSONFormatter{}
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported logger format: %s", format)
|
||||
}
|
||||
|
||||
return &logrus.Logger{
|
||||
Out: os.Stderr,
|
||||
Formatter: formatter,
|
||||
Level: logLevel,
|
||||
}, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user