diff --git a/cmd/root/logger.go b/cmd/root/logger.go index ebe65f60..29e75ed4 100644 --- a/cmd/root/logger.go +++ b/cmd/root/logger.go @@ -3,6 +3,7 @@ package root import ( "context" "fmt" + "os" "github.com/databricks/bricks/libs/flags" "github.com/databricks/bricks/libs/log" @@ -10,6 +11,12 @@ import ( "golang.org/x/exp/slog" ) +const ( + envBricksLogFile = "BRICKS_LOG_FILE" + envBricksLogLevel = "BRICKS_LOG_LEVEL" + envBricksLogFormat = "BRICKS_LOG_FORMAT" +) + func initializeLogger(ctx context.Context, cmd *cobra.Command) (context.Context, error) { opts := slog.HandlerOptions{} opts.Level = logLevel.Level() @@ -41,6 +48,18 @@ var logLevel = flags.NewLogLevelFlag() var logOutput = flags.OutputText func init() { + // Configure defaults from environment, if applicable. + // If the provided value is invalid it is ignored. + if v, ok := os.LookupEnv(envBricksLogFile); ok { + logFile.Set(v) + } + if v, ok := os.LookupEnv(envBricksLogLevel); ok { + logLevel.Set(v) + } + if v, ok := os.LookupEnv(envBricksLogFormat); ok { + logOutput.Set(v) + } + RootCmd.PersistentFlags().Var(&logFile, "log-file", "file to write logs to") RootCmd.PersistentFlags().Var(&logLevel, "log-level", "log level") RootCmd.PersistentFlags().Var(&logOutput, "log-format", "log output format (text or json)")