Package Usage: go: github.com/go-logr/logr
Package logr defines a general-purpose logging API and abstract interfaces
to back that API. Packages in the Go ecosystem can depend on this package,
while callers can implement logging with whatever backend is appropriate.
Logging is done using a Logger instance. Logger is a concrete type with
methods, which defers the actual logging to a LogSink interface. The main
methods of Logger are Info() and Error(). Arguments to Info() and Error()
are key/value pairs rather than printf-style formatted strings, emphasizing
"structured logging".
With Go's standard log package, we might write:
With logr's structured logging, we'd write:
Errors are much the same. Instead of:
We'd write:
Info() and Error() are very similar, but they are separate methods so that
LogSink implementations can choose to do things like attach additional
information (such as stack traces) on calls to Error(). Error() messages are
always logged, regardless of the current verbosity. If there is no error
instance available, passing nil is valid.
Often we want to log information only when the application in "verbose
mode". To write log lines that are more verbose, Logger has a V() method.
The higher the V-level of a log line, the less critical it is considered.
Log-lines with V-levels that are not enabled (as per the LogSink) will not
be written. Level V(0) is the default, and logger.V(0).Info() has the same
meaning as logger.Info(). Negative V-levels have the same meaning as V(0).
Error messages do not have a verbosity level and are always logged.
Where we might have written:
We can write:
Logger instances can have name strings so that all messages logged through
that instance have additional context. For example, you might want to add
a subsystem name:
The WithName() method returns a new Logger, which can be passed to
constructors or other functions for further use. Repeated use of WithName()
will accumulate name "segments". These name segments will be joined in some
way by the LogSink implementation. It is strongly recommended that name
segments contain simple identifiers (letters, digits, and hyphen), and do
not contain characters that could muddle the log output or confuse the
joining operation (e.g. whitespace, commas, periods, slashes, brackets,
quotes, etc).
Logger instances can store any number of key/value pairs, which will be
logged alongside all messages logged through that instance. For example,
you might want to create a Logger instance per managed object:
With the standard log package, we might write:
With logr we'd write:
Logger has very few hard rules, with the goal that LogSink implementations
might have a lot of freedom to differentiate. There are, however, some
things to consider.
The log message consists of a constant message attached to the log line.
This should generally be a simple description of what's occurring, and should
never be a format string. Variable information can then be attached using
named values.
Keys are arbitrary strings, but should generally be constant values. Values
may be any Go value, but how the value is formatted is determined by the
LogSink implementation.
Logger instances are meant to be passed around by value. Code that receives
such a value can call its methods without having to check whether the
instance is ready for use.
The zero logger (= Logger{}) is identical to Discard() and discards all log
entries. Code that receives a Logger by value can simply call it, the methods
will never crash. For cases where passing a logger is optional, a pointer to Logger
should be used.
Keys are not strictly required to conform to any specification or regex, but
it is recommended that they:
These guidelines help ensure that log data is processed properly regardless
of the log implementation. For example, log implementations will try to
output JSON data or will store data for later database (e.g. SQL) queries.
While users are generally free to use key names of their choice, it's
generally best to avoid using the following keys, as they're frequently used
by implementations:
Implementations are encouraged to make use of these keys to represent the
above concepts, when necessary (for example, in a pure-JSON output form, it
would be necessary to represent at least message and timestamp as ordinary
named values).
Implementations may choose to give callers access to the underlying
logging implementation. The recommended pattern for this is:
Logger grants access to the sink to enable type assertions like this:
Custom `With*` functions can be implemented by copying the complete
Logger struct and replacing the sink in the copy:
Don't use New to construct a new Logger with a LogSink retrieved from an
existing Logger. Source code attribution might not work correctly and
unexported fields in Logger get lost.
Beware that the same LogSink instance may be shared by different logger
instances. Calling functions that modify the LogSink will affect all of
those.
19 versions
Latest release: 12 months ago
36,835 dependent packages
View more package details: https://packages.ecosyste.ms/registries/proxy.golang.org/packages/github.com/go-logr/logr
View more repository details: http://repos.ecosyste.ms/hosts/GitHub/repositories/go-logr%2Flogr
Dependent Repos 83,966
admariner/jitsu Fork of jitsucom/jitsu
Jitsu is an open-source data integration platformSize: 29.4 MB - Last synced: 6 days ago - Pushed: almost 2 years ago

kmodules/resource-metadata
API for defining metadata about Kubernetes resourcesSize: 85.4 MB - Last synced: 1 day ago - Pushed: 2 days ago

brotherlogic/logging
Logging for systemSize: 2.76 MB - Last synced: 13 days ago - Pushed: 14 days ago

ossf/scorecard-action
Official GitHub Action for OpenSSF Scorecard.Size: 6.93 MB - Last synced: 6 days ago - Pushed: 11 days ago

zeromike/syft Fork of anchore/syft
CLI tool and library for generating a Software Bill of Materials from container images and filesystemsSize: 10.4 MB - Last synced: 11 months ago - Pushed: almost 3 years ago

aberja/argo Fork of argoproj/argo-workflows
Argo Workflows: Get stuff done with Kubernetes.Size: 66.8 MB - Last synced: 11 months ago - Pushed: about 2 years ago

krasish/test-infra Fork of kyma-project/test-infra
Test infrastructure for the Kyma project.Size: 15.3 MB - Last synced: about 2 years ago - Pushed: about 2 years ago


philip-teleport/teleport Fork of gravitational/teleport
Certificate authority and access plane for SSH, Kubernetes, web apps, databases and desktopsSize: 521 MB - Last synced: about 1 year ago - Pushed: about 1 year ago

spolti/kie-cloud-operator Fork of kiegroup/kie-cloud-operator
OCP Operator for KIESize: 100 MB - Last synced: 7 months ago - Pushed: over 1 year ago


alicefr/kubevirt Fork of kubevirt/kubevirt
Kubernetes Virtualization API and runtime in order to define and manage virtual machines.Size: 283 MB - Last synced: 10 days ago - Pushed: 10 days ago

cheqd/tendermint Fork of tendermint/tendermint
⟁ Tendermint Core (BFT Consensus) in GoSize: 142 MB - Last synced: 10 months ago - Pushed: about 2 years ago

ryanlycch/go-zero-looklook Fork of Mikaelemmmm/go-zero-looklook
🔥基于go-zero(go zero) 微服务全技术栈开发最佳实践项目。Develop best practice projects based on the full technology stack of go zero (go zero) microservices.Size: 101 MB - Last synced: 4 months ago - Pushed: 4 months ago

ahmedabu98/beam Fork of apache/beam
Apache Beam is a unified programming model for Batch and StreamingSize: 392 MB - Last synced: 3 days ago - Pushed: 3 days ago

champ-oss/terraform-aws-metabase
Size: 268 KB - Last synced: about 1 month ago - Pushed: about 1 month ago

fahedouch/crossplane-runtime Fork of crossplane/crossplane-runtime
A set of libraries for writing Crossplane controllers.Size: 2.37 MB - Last synced: 11 months ago - Pushed: 11 months ago

nakamasato/mysql-operator
Manage MySQL users, databases, schemas, etc.Size: 1.71 MB - Last synced: 9 days ago - Pushed: 9 days ago

observIQ/grafana-agent Fork of grafana/agent
Telemetry agent for the LGTM stack.Size: 48.3 MB - Last synced: over 1 year ago - Pushed: over 1 year ago

tharun208/loki Fork of grafana/loki
Like Prometheus, but for logs.Size: 168 MB - Last synced: about 1 year ago - Pushed: about 2 years ago
