stumpy

package module
v0.0.0-...-d19f3dc Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2023 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package stumpy implements full logiface support, as a JSON logger.

It is intended as the "model" logger for the logiface package, and should be the most performant, by virtue of being the most direct. Internally, it appends to each event as a byte buffer, in a similar manner as zerolog.

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	// L is a LoggerFactory, and may be used to configure a
	// logiface.Logger[*Event], using the implementations provided by this
	// package.
	L = LoggerFactory{}
)

Functions

func WithStumpy

func WithStumpy(options ...Option) logiface.Option[*Event]

WithStumpy configures a logiface logger to use a stumpy logger.

Types

type Event

type Event struct {
	// contains filtered or unexported fields
}

func (*Event) AddBool

func (x *Event) AddBool(key string, val bool) bool

func (*Event) AddError

func (x *Event) AddError(err error) bool

func (*Event) AddField

func (x *Event) AddField(key string, val any)

func (*Event) AddFloat32

func (x *Event) AddFloat32(key string, val float32) bool

func (*Event) AddFloat64

func (x *Event) AddFloat64(key string, val float64) bool

func (*Event) AddInt

func (x *Event) AddInt(key string, val int) bool

func (*Event) AddInt64

func (x *Event) AddInt64(key string, val int64) bool

func (*Event) AddMessage

func (x *Event) AddMessage(msg string) bool

func (*Event) AddString

func (x *Event) AddString(key string, val string) bool

func (*Event) AddUint64

func (x *Event) AddUint64(key string, val uint64) bool

func (*Event) Level

func (x *Event) Level() logiface.Level

type Logger

type Logger struct {
	// contains filtered or unexported fields
}
Example (Json1)
{
	old := timeNow
	defer func() { timeNow = old }()
	timeNow = func() time.Time {
		return time.Unix(1680693679, 496235772)
	}
}

logger := L.New(L.WithStumpy(
	WithWriter(os.Stdout),
	WithTimeField(`timestamp`),
	WithLevelField(`level`),
))

requestID := "c7d5a8f1-7e39-4d07-a9f5-73b96d31c036"
userID := 1234
username := "johndoe"
role1ID := 1
role1Name := "admin"
role2ID := 2
role2Name := "user"
language := "en"
emailNotification := true
smsNotification := false
endpoint := "/api/v1/users"
method := "GET"
responseStatus := 200
elapsed := 230
unit := "ms"

user1ID := 5678
user1Username := "janedoe"
user1Email := "janedoe@example.com"
group1ID := 101
group1Name := "group1"
group2ID := 102
group2Name := "group2"

user2ID := 9101
user2Username := "mike92"
user2Email := "mike92@example.com"
group3ID := 103
group3Name := "group3"

logger.Info().
	Str("request_id", requestID).
	Int("user_id", userID).
	Str("username", username).
	Call(func(b *logiface.Builder[*Event]) {
		b.Array().
			Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
				b.Object().
					Int("id", role1ID).
					Str("name", role1Name).
					Add().
					End()
			}).
			Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
				b.Object().
					Int("id", role2ID).
					Str("name", role2Name).
					Add().
					End()
			}).
			As("roles").
			End()
	}).
	Call(func(b *logiface.Builder[*Event]) {
		b.Object().
			Str("language", language).
			Call(func(b *logiface.ObjectBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
				b.Object().
					Bool("email", emailNotification).
					Bool("sms", smsNotification).
					As("notifications").
					End()
			}).
			As("preferences").
			End()
	}).
	Str("endpoint", endpoint).
	Str("method", method).
	Call(func(b *logiface.Builder[*Event]) {
		b.Object().
			Int("status", responseStatus).
			Call(func(b *logiface.ObjectBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
				b.Array().
					Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
						b.Object().
							Int("id", user1ID).
							Str("username", user1Username).
							Str("email", user1Email).
							Call(func(b *logiface.ObjectBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
								b.Array().
									Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
										b.Object().
											Int("id", group1ID).
											Str("name", group1Name).
											Add().
											End()
									}).
									Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
										b.Object().
											Int("id", group2ID).
											Str("name", group2Name).
											Add().
											End()
									}).
									As("groups").
									End()
							}).
							Add().
							End()
					}).
					Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
						b.Object().
							Int("id", user2ID).
							Str("username", user2Username).
							Str("email", user2Email).
							Call(func(b *logiface.ObjectBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
								b.Array().
									Call(func(b *logiface.ArrayBuilder[*Event, *logiface.Chain[*Event, *logiface.Builder[*Event]]]) {
										b.Object().
											Int("id", group3ID).
											Str("name", group3Name).
											Add().
											End()
									}).
									As("groups").
									End()
							}).
							Add().
							End()
					}).
					As("users").
					End()
			}).
			As("response").
			End()
	}).
	Int("elapsed", elapsed).
	Str("unit", unit).
	Log("API request processed")
Output:

{"timestamp":"2023-04-05T11:21:19.496235772Z","level":"info","request_id":"c7d5a8f1-7e39-4d07-a9f5-73b96d31c036","user_id":1234,"username":"johndoe","roles":[{"id":1,"name":"admin"},{"id":2,"name":"user"}],"preferences":{"language":"en","notifications":{"email":true,"sms":false}},"endpoint":"/api/v1/users","method":"GET","response":{"status":200,"users":[{"id":5678,"username":"janedoe","email":"janedoe@example.com","groups":[{"id":101,"name":"group1"},{"id":102,"name":"group2"}]},{"id":9101,"username":"mike92","email":"mike92@example.com","groups":[{"id":103,"name":"group3"}]}]},"elapsed":230,"unit":"ms","msg":"API request processed"}

func (*Logger) AddArray

func (x *Logger) AddArray(evt *Event, key string, arr *Event)

func (*Logger) AddObject

func (x *Logger) AddObject(evt *Event, key string, obj *Event)

func (*Logger) AddStartArray

func (x *Logger) AddStartArray(evt *Event, key string) *Event

func (*Logger) AddStartObject

func (x *Logger) AddStartObject(evt *Event, key string) *Event

func (*Logger) AppendArray

func (x *Logger) AppendArray(arr *Event, val *Event) *Event

func (*Logger) AppendBool

func (*Logger) AppendBool(arr *Event, val bool) *Event

func (*Logger) AppendError

func (*Logger) AppendError(arr *Event, err error) *Event

func (*Logger) AppendField

func (*Logger) AppendField(arr *Event, val any) *Event

func (*Logger) AppendFloat32

func (*Logger) AppendFloat32(arr *Event, val float32) *Event

func (*Logger) AppendFloat64

func (*Logger) AppendFloat64(arr *Event, val float64) *Event

func (*Logger) AppendInt

func (*Logger) AppendInt(arr *Event, val int) *Event

func (*Logger) AppendInt64

func (*Logger) AppendInt64(arr *Event, val int64) *Event

func (*Logger) AppendObject

func (x *Logger) AppendObject(arr *Event, val *Event) *Event

func (*Logger) AppendStartArray

func (x *Logger) AppendStartArray(arr *Event) *Event

func (*Logger) AppendStartObject

func (x *Logger) AppendStartObject(arr *Event) *Event

func (*Logger) AppendString

func (*Logger) AppendString(arr *Event, val string) *Event

func (*Logger) AppendUint64

func (*Logger) AppendUint64(arr *Event, val uint64) *Event

func (*Logger) CanAddStartArray

func (x *Logger) CanAddStartArray() bool

func (*Logger) CanAddStartObject

func (x *Logger) CanAddStartObject() bool

func (*Logger) CanAppendArray

func (x *Logger) CanAppendArray() bool

func (*Logger) CanAppendBool

func (*Logger) CanAppendBool() bool

func (*Logger) CanAppendError

func (*Logger) CanAppendError() bool

func (*Logger) CanAppendFloat32

func (*Logger) CanAppendFloat32() bool

func (*Logger) CanAppendFloat64

func (*Logger) CanAppendFloat64() bool

func (*Logger) CanAppendInt

func (*Logger) CanAppendInt() bool

func (*Logger) CanAppendInt64

func (*Logger) CanAppendInt64() bool

func (*Logger) CanAppendObject

func (x *Logger) CanAppendObject() bool

func (*Logger) CanAppendStartArray

func (x *Logger) CanAppendStartArray() bool

func (*Logger) CanAppendStartObject

func (x *Logger) CanAppendStartObject() bool

func (*Logger) CanAppendString

func (*Logger) CanAppendString() bool

func (*Logger) CanAppendUint64

func (*Logger) CanAppendUint64() bool

func (*Logger) CanSetArray

func (x *Logger) CanSetArray() bool

func (*Logger) CanSetBool

func (*Logger) CanSetBool() bool

func (*Logger) CanSetError

func (*Logger) CanSetError() bool

func (*Logger) CanSetFloat32

func (*Logger) CanSetFloat32() bool

func (*Logger) CanSetFloat64

func (*Logger) CanSetFloat64() bool

func (*Logger) CanSetInt

func (*Logger) CanSetInt() bool

func (*Logger) CanSetInt64

func (*Logger) CanSetInt64() bool

func (*Logger) CanSetObject

func (x *Logger) CanSetObject() bool

func (*Logger) CanSetStartArray

func (x *Logger) CanSetStartArray() bool

func (*Logger) CanSetStartObject

func (x *Logger) CanSetStartObject() bool

func (*Logger) CanSetString

func (*Logger) CanSetString() bool

func (*Logger) CanSetUint64

func (*Logger) CanSetUint64() bool

func (*Logger) NewArray

func (x *Logger) NewArray() *Event

func (*Logger) NewEvent

func (x *Logger) NewEvent(level logiface.Level) (e *Event)

func (*Logger) NewObject

func (x *Logger) NewObject() *Event

func (*Logger) ReleaseEvent

func (x *Logger) ReleaseEvent(e *Event)

func (*Logger) SetArray

func (x *Logger) SetArray(obj *Event, key string, val *Event) *Event

func (*Logger) SetBool

func (*Logger) SetBool(obj *Event, key string, val bool) *Event

func (*Logger) SetError

func (*Logger) SetError(obj *Event, err error) *Event

func (*Logger) SetField

func (*Logger) SetField(obj *Event, key string, val any) *Event

func (*Logger) SetFloat32

func (*Logger) SetFloat32(obj *Event, key string, val float32) *Event

func (*Logger) SetFloat64

func (*Logger) SetFloat64(obj *Event, key string, val float64) *Event

func (*Logger) SetInt

func (*Logger) SetInt(obj *Event, key string, val int) *Event

func (*Logger) SetInt64

func (*Logger) SetInt64(obj *Event, key string, val int64) *Event

func (*Logger) SetObject

func (x *Logger) SetObject(obj *Event, key string, val *Event) *Event

func (*Logger) SetStartArray

func (x *Logger) SetStartArray(obj *Event, key string) *Event

func (*Logger) SetStartObject

func (x *Logger) SetStartObject(obj *Event, key string) *Event

func (*Logger) SetString

func (*Logger) SetString(obj *Event, key string, val string) *Event

func (*Logger) SetUint64

func (*Logger) SetUint64(obj *Event, key string, val uint64) *Event

func (*Logger) Write

func (x *Logger) Write(event *Event) (err error)

type LoggerFactory

type LoggerFactory struct {
	// contains filtered or unexported fields
}

LoggerFactory is provided as a convenience, embedding logiface.LoggerFactory[*Event], and aliasing the (logiface) option functions implemented within this package.

func (LoggerFactory) WithStumpy

func (LoggerFactory) WithStumpy(options ...Option) logiface.Option[*Event]

WithStumpy is an alias of the package function of the same name.

type Option

type Option func(c *loggerConfig)

Option models a configuration option for this package's logger, see also the package level functions, returning values of this type.

func WithErrorField

func WithErrorField(field string) Option

func WithLevelField

func WithLevelField(field string) Option

func WithMessageField

func WithMessageField(field string) Option

func WithTimeField

func WithTimeField(field string) Option

func WithWriter

func WithWriter(writer io.Writer) Option

Jump to

Keyboard shortcuts

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