Package Usage: go: github.com/go-kit/log
Package log provides a structured logger.
Structured logging produces logs easily consumed later by humans or
machines. Humans might be interested in debugging errors, or tracing
specific requests. Machines might be interested in counting interesting
events, or aggregating information for off-line processing. In both cases,
it is important that the log messages are structured and actionable.
Package log is designed to encourage both of these best practices.
The fundamental interface is Logger. Loggers create log events from
key/value data. The Logger interface has a single method, Log, which
accepts a sequence of alternating key/value pairs, which this package names
keyvals.
Here is an example of a function using a Logger to create log events.
The keys in the above example are "taskID" and "event". The values are
task.ID, "starting task", and "task complete". Every key is followed
immediately by its value.
Keys are usually plain strings. Values may be any type that has a sensible
encoding in the chosen log format. With structured logging it is a good
idea to log simple values without formatting them. This practice allows
the chosen logger to encode values in the most appropriate way.
A contextual logger stores keyvals that it includes in all log events.
Building appropriate contextual loggers reduces repetition and aids
consistency in the resulting log output. With, WithPrefix, and WithSuffix
add context to a logger. We can use With to improve the RunTask example.
The improved version emits the same log events as the original for the
first and last calls to Log. Passing the contextual logger to taskHelper
enables each log event created by taskHelper to include the task.ID even
though taskHelper does not have access to that value. Using contextual
loggers this way simplifies producing log output that enables tracing the
life cycle of individual tasks. (See the Contextual example for the full
code of the above snippet.)
A Valuer function stored in a contextual logger generates a new value each
time an event is logged. The Valuer example demonstrates how this feature
works.
Valuers provide the basis for consistently logging timestamps and source
code location. The log package defines several valuers for that purpose.
See Timestamp, DefaultTimestamp, DefaultTimestampUTC, Caller, and
DefaultCaller. A common logger initialization sequence that ensures all log
entries contain a timestamp and source location looks like this:
Applications with multiple goroutines want each log event written to the
same logger to remain separate from other log events. Package log provides
two simple solutions for concurrent safe logging.
NewSyncWriter wraps an io.Writer and serializes each call to its Write
method. Using a SyncWriter has the benefit that the smallest practical
portion of the logging logic is performed within a mutex, but it requires
the formatting Logger to make only one call to Write per log event.
NewSyncLogger wraps any Logger and serializes each call to its Log method.
Using a SyncLogger has the benefit that it guarantees each log event is
handled atomically within the wrapped logger, but it typically serializes
both the formatting and output logic. Use a SyncLogger if the formatting
logger may perform multiple writes per log event.
This package relies on the practice of wrapping or decorating loggers with
other loggers to provide composable pieces of functionality. It also means
that Logger.Log must return an error because some
implementations—especially those that output log data to an io.Writer—may
encounter errors that cannot be handled locally. This in turn means that
Loggers that wrap other loggers should return errors from the wrapped
logger up the stack.
Fortunately, the decorator pattern also provides a way to avoid the
necessity to check for errors every time an application calls Logger.Log.
An application required to panic whenever its Logger encounters
an error could initialize its logger as follows.
4 versions
Latest release: about 3 years ago
8,646 dependent packages
View more package details: https://packages.ecosystem.code.gouv.fr/registries/proxy.golang.org/packages/github.com/go-kit/log
Dependent Repos 7
1024pix/steampipe-plugin-learningcontent
Steampipe plugin to query LCMS contentSize: 101 KB - Last synced: 4 days ago - Pushed: over 1 year ago

1024pix/steampipe-plugin-metabase
Use SQL to query databases, tables, permissions and more from MetabaseSize: 1.22 MB - Last synced: 4 days ago - Pushed: 19 days ago

swh/infra/ci-cd/3rdparty/cert-manager-webhook-gandi
Last synced: 7 months ago - Pushed: 12 months ago
betagouv/sealed-secrets Fork of bitnami-labs/sealed-secrets
A Kubernetes controller and tool for one-way encrypted SecretsSize: 19.2 MB - Last synced: about 23 hours ago - Pushed: almost 3 years ago

radiofrance/process-exporter Fork of ncabatoff/process-exporter
Prometheus exporter that mines /proc to report on selected processesSize: 2.25 MB - Last synced: 1 day ago - Pushed: over 1 year ago

web-et-numerique/factory/llle_project/cozy-stack
Fork of cozy-stack https://github.com/cozy/cozy-stackLast synced: 7 months ago

InseeFrLab/onyxia-onboarding-operator
An operator for onyxia's onboarding tasksSize: 71.3 KB - Last synced: about 24 hours ago - Pushed: over 1 year ago

SocialGouv/secretgen-controller Fork of carvel-dev/secretgen-controller
secretgen-controller provides CRDs to specify what secrets need to be on Kubernetes cluster (to be generated or not)Size: 30.4 MB - Last synced: 7 days ago - Pushed: 12 months ago


