Go cmd helper.
This provides helpers on top of github.com/urfave/cli
.
Install with:
go get github.com/hamba/cmd/v2
Note: This project has renamed the default branch from master
to main
. You will need to update your local environment.
func yourAction(c *cli.Context) error {
log, err := cmd.NewLogger(c)
if err != nil {
// Handle error.
}
stats, err := cmd.NewStatter(c, log)
if err != nil {
// Handle error.
}
tracer, err := cmd.NewTracer(c, log,
semconv.ServiceNameKey.String("my-service"),
semconv.ServiceVersionKey.String("1.0.0"),
)
if err != nil {
// Handle error.
return
}
defer tracer.Shutdown(context.Background())
// Run your application here...
}
The logger flags are used by cmd.NewLogger
to create a hamba.Logger
.
This flag sets the log formatter to use. The available options are logfmt
(default), json
, console
.
Example: --log.format=console
This flag sets the log level to filer on. The available options are debug
, info
(default), warn
, error
, crit
.
Example: --log.level=error
This flag sets contextual key value pairs to set on all log messages. This flag can be specified multiple times.
Example: --log.ctx="app=my-app" --log.ctx="zone=eu-west"
The statter flags are used by cmd.NewStatter
to create a new `hamba.Statter.
This flag sets the DSN describing the stats reporter to use. The available options are statsd
, prometheus
, l2met
.
The DSN can in some situations specify the host and configuration values as shown in the below examples:
Statsd:
--stats.dsn="statsd://host:port?flushBytes=1432&flushInterval=10s"
The host
and port
are required. Optionally flushBytes
and flushInterval
can be set, controlling how often the stats will
be sent to the Statsd server.
Prometheus:
--stats.dsn="prometheus://host:port"
or
--stats.dsn="prom://host:port"
The host
and port
are optional. If set they will start a prometheus http server on the specified host and port.
Victoria Metrics:
--stats.dsn="victoriametrics://host:port"
or
--stats.dsn="vm://host:port"
The host
and port
are optional. If set they will start a victoria metrics http server on the specified host and port.
l2met:
--stats.dsn="l2met://"
This report has no exposed options.
This flag sets the interval at which the aggregated stats will be reported to the reporter.
Example: --stats-interval=10s
This flag sets the prefix attached to all stats keys.
Example: --stats.prefix=my-app.server
This flag sets tag key value pairs to set on all stats. This flag can be specified multiple times.
Example: --stats.tags="app=my-app" --stats.tags="zone=eu-west"
The tracing flags are used by cmd.NewTracer
to create a new open telemetry trace.TraceProvider
.
This flag sets the exporter to send spans to. The available options are jaeger
and zipkin
.
Example: --tracing.exporter=jaeger
This flag sets the endpoint the exporter should send traces to.
Example: --tracing.endpoint="agent-host:port"
or --tracing.endpoint="http://host:port/api/v2"
This flag sets the sample ratio of spans that will be reported to the exporter. This should be between 0 and 1.
Example: --tracing.ratio=0.2