mirror of
https://github.com/tarampampam/error-pages.git
synced 2024-08-30 18:22:40 +00:00
104 lines
2.9 KiB
Go
104 lines
2.9 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"runtime"
|
|
"strings"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
"gh.tarampamp.am/error-pages/internal/checkers"
|
|
"gh.tarampamp.am/error-pages/internal/cli/build"
|
|
"gh.tarampamp.am/error-pages/internal/cli/healthcheck"
|
|
"gh.tarampamp.am/error-pages/internal/cli/serve"
|
|
"gh.tarampamp.am/error-pages/internal/env"
|
|
"gh.tarampamp.am/error-pages/internal/logger"
|
|
"gh.tarampamp.am/error-pages/internal/version"
|
|
)
|
|
|
|
// NewApp creates new console application.
|
|
func NewApp(appName string) *cli.App { //nolint:funlen
|
|
const (
|
|
logLevelFlagName = "log-level"
|
|
logFormatFlagName = "log-format"
|
|
verboseFlagName = "verbose"
|
|
debugFlagName = "debug"
|
|
logJSONFlagName = "log-json"
|
|
|
|
defaultLogLevel = logger.InfoLevel
|
|
defaultLogFormat = logger.ConsoleFormat
|
|
)
|
|
|
|
// create "default" logger (will be overwritten later with customized)
|
|
var log, _ = logger.New(defaultLogLevel, defaultLogFormat) // error will never occurs
|
|
|
|
return &cli.App{
|
|
Usage: appName,
|
|
Before: func(c *cli.Context) (err error) {
|
|
_ = log.Sync() // sync previous logger instance
|
|
|
|
var logLevel, logFormat = defaultLogLevel, defaultLogFormat //nolint:ineffassign
|
|
|
|
if c.Bool(verboseFlagName) || c.Bool(debugFlagName) {
|
|
logLevel = logger.DebugLevel
|
|
} else {
|
|
// parse logging level
|
|
if logLevel, err = logger.ParseLevel(c.String(logLevelFlagName)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if c.Bool(logJSONFlagName) {
|
|
logFormat = logger.JSONFormat
|
|
} else {
|
|
// parse logging format
|
|
if logFormat, err = logger.ParseFormat(c.String(logFormatFlagName)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
configured, err := logger.New(logLevel, logFormat) // create new logger instance
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*log = *configured // replace "default" logger with customized
|
|
|
|
return nil
|
|
},
|
|
Commands: []*cli.Command{
|
|
healthcheck.NewCommand(checkers.NewHealthChecker(context.TODO())),
|
|
build.NewCommand(log),
|
|
serve.NewCommand(log),
|
|
},
|
|
Version: fmt.Sprintf("%s (%s)", version.Version(), runtime.Version()),
|
|
Flags: []cli.Flag{ // global flags
|
|
&cli.BoolFlag{ // kept for backward compatibility
|
|
Name: verboseFlagName,
|
|
Usage: "verbose output (DEPRECATED FLAG)",
|
|
},
|
|
&cli.BoolFlag{ // kept for backward compatibility
|
|
Name: debugFlagName,
|
|
Usage: "debug output (DEPRECATED FLAG)",
|
|
},
|
|
&cli.BoolFlag{ // kept for backward compatibility
|
|
Name: logJSONFlagName,
|
|
Usage: "logs in JSON format (DEPRECATED FLAG)",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: logLevelFlagName,
|
|
Value: defaultLogLevel.String(),
|
|
Usage: "logging level (`" + strings.Join(logger.LevelStrings(), "/") + "`)",
|
|
EnvVars: []string{env.LogLevel.String()},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: logFormatFlagName,
|
|
Value: defaultLogFormat.String(),
|
|
Usage: "logging format (`" + strings.Join(logger.FormatStrings(), "/") + "`)",
|
|
EnvVars: []string{env.LogFormat.String()},
|
|
},
|
|
},
|
|
}
|
|
}
|