package log
import (
- "flag"
"fmt"
"io"
"io/ioutil"
"strings"
"github.com/sirupsen/logrus"
+ "gopkg.in/alecthomas/kingpin.v2"
)
-type levelFlag string
-
-// String implements flag.Value.
-func (f levelFlag) String() string {
- return fmt.Sprintf("%q", origLogger.Level.String())
-}
-
-// Set implements flag.Value.
-func (f levelFlag) Set(level string) error {
- l, err := logrus.ParseLevel(level)
- if err != nil {
- return err
- }
- origLogger.Level = l
- return nil
-}
-
// setSyslogFormatter is nil if the target architecture does not support syslog.
var setSyslogFormatter func(logger, string, string) error
origLogger.Formatter = &logrus.JSONFormatter{}
}
-type logFormatFlag url.URL
-
-// String implements flag.Value.
-func (f logFormatFlag) String() string {
- u := url.URL(f)
- return fmt.Sprintf("%q", u.String())
-}
-
-// Set implements flag.Value.
-func (f logFormatFlag) Set(format string) error {
- return baseLogger.SetFormat(format)
-}
-
-func init() {
- AddFlags(flag.CommandLine)
+type loggerSettings struct {
+ level string
+ format string
}
-// AddFlags adds the flags used by this package to the given FlagSet. That's
-// useful if working with a custom FlagSet. The init function of this package
-// adds the flags to flag.CommandLine anyway. Thus, it's usually enough to call
-// flag.Parse() to make the logging flags take effect.
-func AddFlags(fs *flag.FlagSet) {
- fs.Var(
- levelFlag(origLogger.Level.String()),
- "log.level",
- "Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal]",
- )
- fs.Var(
- logFormatFlag(url.URL{Scheme: "logger", Opaque: "stderr"}),
- "log.format",
- `Set the log target and format. Example: "logger:syslog?appname=bob&local=7" or "logger:stdout?json=true"`,
- )
+func (s *loggerSettings) apply(ctx *kingpin.ParseContext) error {
+ err := baseLogger.SetLevel(s.level)
+ if err != nil {
+ return err
+ }
+ err = baseLogger.SetFormat(s.format)
+ return err
+}
+
+// AddFlags adds the flags used by this package to the Kingpin application.
+// To use the default Kingpin application, call AddFlags(kingpin.CommandLine)
+func AddFlags(a *kingpin.Application) {
+ s := loggerSettings{}
+ kingpin.Flag("log.level", "Only log messages with the given severity or above. Valid levels: [debug, info, warn, error, fatal]").
+ Default(origLogger.Level.String()).
+ StringVar(&s.level)
+ defaultFormat := url.URL{Scheme: "logger", Opaque: "stderr"}
+ kingpin.Flag("log.format", `Set the log target and format. Example: "logger:syslog?appname=bob&local=7" or "logger:stdout?json=true"`).
+ Default(defaultFormat.String()).
+ StringVar(&s.format)
+ a.Action(s.apply)
}
// Logger is the interface for loggers used in the Prometheus components.
"revisionTime": "2017-06-21T12:10:01Z"
},
{
- "checksumSHA1": "esljoY35OOHttvpjBctA6WGZc70=",
+ "checksumSHA1": "jYpLEs+wZ5LZubvOJEDSQ8I14MI=",
"path": "github.com/prometheus/common/log",
- "revision": "0866df4b85a18d652b6965be022d007cdf076822",
- "revisionTime": "2017-06-21T12:10:01Z"
+ "revision": "8ba51016a21456f1649877d7079f416d69eb3948",
+ "revisionTime": "2017-07-31T09:30:31Z"
},
{
"checksumSHA1": "3VoqH7TFfzA6Ds0zFzIbKCUvBmw=",