loggerapi

package
v1.76.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 15, 2025 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type EventTracingCounters added in v1.70.0

type EventTracingCounters []int

func (EventTracingCounters) CloneBranchSub added in v1.75.0

func (etc EventTracingCounters) CloneBranchSub() EventTracingCounters

func (EventTracingCounters) Inc added in v1.70.0

func (etc EventTracingCounters) Inc()

type IEvent

type IEvent interface {
	GetTraceContext() *TraceContext
	GetUserObject() (uo any)

	// Inactivation applies to real events only, all data set ops will be bypassed.
	// However, if applied to sub-logger init chain, nothing is bypassed.
	Inactive() IEvent

	// This is useful to do some work only if the event is activated, e.g. do some data prep
	// or JSON marshalling, and waste no time otherwise.
	//
	//	     logger.InfoEvent("1212").Inactive().IfActive(func(ev loggerapi.IEvent) {
	//				// do some heavy work, then
	//				ev.RawJSON(b)
	//			}).Title("my event").Send()
	IfActive(func(IEvent)) IEvent

	Caller(skip ...int) IEvent
	Str(string, string) IEvent
	Strf(string, string, ...any) IEvent
	Strs(string, []string) IEvent
	Time(string, time.Time) IEvent
	Int(string, int) IEvent
	Ints(string, []int) IEvent
	Float64(string, float64) IEvent
	Floats64(string, []float64) IEvent
	Array(k string, v *zerolog.Array) IEvent
	Dict(k string, v *zerolog.Event) IEvent
	RawJSON(string, []byte) IEvent
	Bytes(string, []byte) IEvent

	// It's like Msg(), but sets the value to "title" field, and also
	// can be used to report to metrics. Must be low-cardinality string.
	// DO NOT put in it any variable strings, e.g. Sprintf()-formatted or
	// containing requestId or any other Id or counters!
	// Can't be applied for sub-logger chains, only for events.
	// In typical idiom, must be used BEFORE the Msgtag() - it's specififcally
	// designed to not bypass in inactive events.
	Title(string) IEvent

	// The same as Title().Send()
	SendTitle(string)

	SendMsgf(string, ...any)
	SendMsg(string)
	Send()
}

type IEventInHook added in v1.73.0

type IEventInHook interface {
	GetTraceContext() *TraceContext
	GetUserObject() (uo any)
}

type ILogger

type ILogger interface {
	GetTraceContext() *TraceContext
	GetUserObject() (uo any)

	TraceEvent(msgtag string) IEvent
	DiagnosticEvent(msgtag string) IEvent
	InfoEvent(msgtag string) IEvent
	WarnEvent(msgtag string) IEvent
	ErrorEvent(msgtag string) IEvent
	ErrEvent(err error, msgtag string) IEvent

	// Creates new sub-logger, suitable for another thread.
	// By default, all new sub-loggers are active, even if parent was inactivated.
	NewSubLoggerInitChain(msgtag string) ISubLoggerInitChain

	// Faster single-thread-only alternative to creating a sub-logger; avoids unnecessary
	// allocations, and calls hooks. Doesn't create another logger, modifies existing one.
	SpanBegin(msgtag string) ILogger
	SpanEnd() // counterpart for SpanBegin()

	SwitchOnTheOfflineAccumulation() ILogger
	FinishAccumulationAndFetch() (llines []*configdb.Root)
	RestartTheAccumulation()
}

type ISubLoggerInitChain added in v1.73.0

type ISubLoggerInitChain interface {

	// Attach any user object to the event object, to be used later
	// inside the callback hooks. Intended to pass user-level runtime data to the
	// hook(s). Doesn't add anything to the logline serializations.
	// Normally, the UO must be a pointer, and at the receiving side in the hook
	// you do something along the lines:
	//
	//	myObject, _ := e.GetUserObject().(*MyObject)
	//	if myObject !=  nil {
	//		...
	//	}
	AddUserObject(uo any) ISubLoggerInitChain

	// Inactivation applies to real events only, all data set ops will be bypassed.
	// However, if applied to sub-logger init chain, nothing is bypassed.
	Inactive() ISubLoggerInitChain

	Caller(skip ...int) ISubLoggerInitChain
	Str(string, string) ISubLoggerInitChain
	Strf(string, string, ...any) ISubLoggerInitChain
	Strs(string, []string) ISubLoggerInitChain
	Time(string, time.Time) ISubLoggerInitChain
	Int(string, int) ISubLoggerInitChain
	Ints(string, []int) ISubLoggerInitChain
	Float64(string, float64) ISubLoggerInitChain
	Floats64(string, []float64) ISubLoggerInitChain
	Array(k string, v *zerolog.Array) ISubLoggerInitChain
	Dict(k string, v *zerolog.Event) ISubLoggerInitChain
	RawJSON(string, []byte) ISubLoggerInitChain
	Bytes(string, []byte) ISubLoggerInitChain

	WithClonedRootContext(optFuncs ...func(rctx *RootContext)) ISubLoggerInitChain
	ILogger() ILogger // (!) Each ILogger must be used in single thread, otherwise you'll get inconsistent tagging
}

type Msgtags

type Msgtags []string

Few first strings are reported to metrics, be careful to NOT put in them high-cardinality IDs.

func (Msgtags) CloneWith added in v1.75.0

func (msgtags Msgtags) CloneWith(ss ...string) Msgtags

func (Msgtags) String

func (msgtags Msgtags) String() string

type RootContext added in v1.70.0

type RootContext struct {
	MainWriter       io.Writer
	MsgtagKey        string
	XUIdKey          string // XU logger root id
	ETCKey           string // event tracing counters
	IfSendHook       func(e IEventInHook) (doSend bool)
	EventOnWireHook  func(e IEventInHook, p []byte)
	ActivationHook   func(e IEventInHook) (inactivate bool) // If the ActicationHook is set, it is called, and it can reactivate the event.
	NewSubLoggerHook func(tc *TraceContext)
	SpanBeginHook    func(tc *TraceContext)
	SpanEndHook      func(tc *TraceContext)
	XUId             string
}

func (*RootContext) Clone added in v1.73.0

func (rctx0 *RootContext) Clone() *RootContext

type TraceContext added in v1.71.0

type TraceContext struct {
	ETC        EventTracingCounters
	Msgtags    Msgtags
	IsInactive bool
}

func (*TraceContext) MsgtagsStringWith added in v1.76.0

func (tc *TraceContext) MsgtagsStringWith(tags ...string) string

faster alternative to the logger.GetTraceContext().Msgtags.CloneWith("*****").String() idiom

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL