Documentation ¶
Overview ¶
Package logger defines a type for writing to logs. It's just a convenience type so that we don't have to pass verbose func(...) types around.
Index ¶
- func Discard(string, ...any)
- func FuncWriter(f Logf) io.Writer
- func StdLogger(f Logf) *log.Logger
- type ArgWriter
- type Context
- type Logf
- func Filtered(logf Logf, allow func(s string) bool) Logf
- func FromContext(ctx Context) Logf
- func LogOnChange(logf Logf, maxInterval time.Duration, timeNow func() time.Time) Logf
- func LogfCloser(logf Logf) (newLogf Logf, close func())
- func RateLimitedFn(logf Logf, f time.Duration, burst int, maxCache int) Logf
- func RateLimitedFnWithClock(logf Logf, f time.Duration, burst int, maxCache int, timeNow func() time.Time) Logf
- func RusagePrefixLog(logf Logf) Logf
- func SlowLoggerWithClock(ctx context.Context, logf Logf, f time.Duration, burst int, ...) Logf
- func WithPrefix(f Logf, prefix string) Logf
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FuncWriter ¶
FuncWriter returns an io.Writer that writes to f.
Types ¶
type ArgWriter ¶ added in v0.98.1
ArgWriter is a fmt.Formatter that can be passed to any Logf func to efficiently write to a %v argument without allocations.
type Context ¶ added in v1.20.0
A Context is a context.Context that should contain a custom log function, obtainable from FromContext. If no log function is present, FromContext will return log.Printf. To construct a Context, use Add
type Logf ¶
Logf is the basic Tailscale logger type: a printf-like func. Like log.Printf, the format need not end in a newline. Logf functions must be safe for concurrent use.
func Filtered ¶ added in v1.4.0
Filtered returns a Logf that silently swallows some log lines. Each inbound format and args is evaluated and printed to a string s. The original format and args are passed to logf if and only if allow(s) returns true.
func FromContext ¶ added in v1.20.0
FromContext extracts a log function from ctx.
func LogOnChange ¶ added in v0.98.1
LogOnChange logs a given line only if line != lastLine, or if maxInterval has passed since the last time this identical line was logged.
func LogfCloser ¶ added in v1.4.0
LogfCloser wraps logf to create a logger that can be closed. Calling close makes all future calls to newLogf into no-ops.
func RateLimitedFn ¶ added in v0.98.1
RateLimitedFn is a wrapper for RateLimitedFnWithClock that includes the current time automatically. This is mainly for backward compatibility.
func RateLimitedFnWithClock ¶ added in v1.8.0
func RateLimitedFnWithClock(logf Logf, f time.Duration, burst int, maxCache int, timeNow func() time.Time) Logf
RateLimitedFnWithClock returns a rate-limiting Logf wrapping the given logf. Messages are allowed through at a maximum of one message every f (where f is a time.Duration), in bursts of up to burst messages at a time. Up to maxCache format strings will be tracked separately. timeNow is a function that returns the current time, used for calculating rate limits.
func RusagePrefixLog ¶ added in v1.2.0
RusagePrefixLog returns a Logf func wrapping the provided logf func that adds a prefixed log message to each line with the current binary memory usage and max RSS.
func SlowLoggerWithClock ¶ added in v1.38.0
func SlowLoggerWithClock(ctx context.Context, logf Logf, f time.Duration, burst int, timeNow func() time.Time) Logf
SlowLoggerWithClock is a logger that applies rate limits similar to RateLimitedFnWithClock, but instead of dropping logs will sleep until they can be written. This should only be used for debug logs, and not in a hot path.
The provided context, if canceled, will cause all logs to be dropped and prevent any sleeps.
func WithPrefix ¶
WithPrefix wraps f, prefixing each format with the provided prefix.
func (Logf) JSON ¶ added in v1.22.0
JSON marshals v as JSON and writes it to logf formatted with the annotation to make logtail treat it as a structured log.
The recType is the record type and becomes the key of the wrapper JSON object that is logged. That is, if recType is "foo" and v is 123, the value logged is {"foo":123}.
Do not use recType "logtail", "v", "text", or "metrics", with any case. Those are reserved for the logging system.
The level can be from 0 to 9. Levels from 1 to 9 are included in the logged JSON object, like {"foo":123,"v":2}.