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 ¶
- Variables
- func WithStumpy(options ...Option) logiface.Option[*Event]
- type Event
- func (x *Event) AddBool(key string, val bool) bool
- func (x *Event) AddError(err error) bool
- func (x *Event) AddField(key string, val any)
- func (x *Event) AddFloat32(key string, val float32) bool
- func (x *Event) AddFloat64(key string, val float64) bool
- func (x *Event) AddInt(key string, val int) bool
- func (x *Event) AddInt64(key string, val int64) bool
- func (x *Event) AddMessage(msg string) bool
- func (x *Event) AddString(key string, val string) bool
- func (x *Event) AddUint64(key string, val uint64) bool
- func (x *Event) Level() logiface.Level
- type Logger
- func (x *Logger) AddArray(evt *Event, key string, arr *Event)
- func (x *Logger) AddObject(evt *Event, key string, obj *Event)
- func (x *Logger) AddStartArray(evt *Event, key string) *Event
- func (x *Logger) AddStartObject(evt *Event, key string) *Event
- func (x *Logger) AppendArray(arr *Event, val *Event) *Event
- func (*Logger) AppendBool(arr *Event, val bool) *Event
- func (*Logger) AppendError(arr *Event, err error) *Event
- func (*Logger) AppendField(arr *Event, val any) *Event
- func (*Logger) AppendFloat32(arr *Event, val float32) *Event
- func (*Logger) AppendFloat64(arr *Event, val float64) *Event
- func (*Logger) AppendInt(arr *Event, val int) *Event
- func (*Logger) AppendInt64(arr *Event, val int64) *Event
- func (x *Logger) AppendObject(arr *Event, val *Event) *Event
- func (x *Logger) AppendStartArray(arr *Event) *Event
- func (x *Logger) AppendStartObject(arr *Event) *Event
- func (*Logger) AppendString(arr *Event, val string) *Event
- func (*Logger) AppendUint64(arr *Event, val uint64) *Event
- func (x *Logger) CanAddStartArray() bool
- func (x *Logger) CanAddStartObject() bool
- func (x *Logger) CanAppendArray() bool
- func (*Logger) CanAppendBool() bool
- func (*Logger) CanAppendError() bool
- func (*Logger) CanAppendFloat32() bool
- func (*Logger) CanAppendFloat64() bool
- func (*Logger) CanAppendInt() bool
- func (*Logger) CanAppendInt64() bool
- func (x *Logger) CanAppendObject() bool
- func (x *Logger) CanAppendStartArray() bool
- func (x *Logger) CanAppendStartObject() bool
- func (*Logger) CanAppendString() bool
- func (*Logger) CanAppendUint64() bool
- func (x *Logger) CanSetArray() bool
- func (*Logger) CanSetBool() bool
- func (*Logger) CanSetError() bool
- func (*Logger) CanSetFloat32() bool
- func (*Logger) CanSetFloat64() bool
- func (*Logger) CanSetInt() bool
- func (*Logger) CanSetInt64() bool
- func (x *Logger) CanSetObject() bool
- func (x *Logger) CanSetStartArray() bool
- func (x *Logger) CanSetStartObject() bool
- func (*Logger) CanSetString() bool
- func (*Logger) CanSetUint64() bool
- func (x *Logger) NewArray() *Event
- func (x *Logger) NewEvent(level logiface.Level) (e *Event)
- func (x *Logger) NewObject() *Event
- func (x *Logger) ReleaseEvent(e *Event)
- func (x *Logger) SetArray(obj *Event, key string, val *Event) *Event
- func (*Logger) SetBool(obj *Event, key string, val bool) *Event
- func (*Logger) SetError(obj *Event, err error) *Event
- func (*Logger) SetField(obj *Event, key string, val any) *Event
- func (*Logger) SetFloat32(obj *Event, key string, val float32) *Event
- func (*Logger) SetFloat64(obj *Event, key string, val float64) *Event
- func (*Logger) SetInt(obj *Event, key string, val int) *Event
- func (*Logger) SetInt64(obj *Event, key string, val int64) *Event
- func (x *Logger) SetObject(obj *Event, key string, val *Event) *Event
- func (x *Logger) SetStartArray(obj *Event, key string) *Event
- func (x *Logger) SetStartObject(obj *Event, key string) *Event
- func (*Logger) SetString(obj *Event, key string, val string) *Event
- func (*Logger) SetUint64(obj *Event, key string, val uint64) *Event
- func (x *Logger) Write(event *Event) (err error)
- type LoggerFactory
- type Option
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 ¶
Types ¶
type Event ¶
type Event struct {
// contains filtered or unexported fields
}
func (*Event) AddMessage ¶
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) AppendStartArray ¶
func (*Logger) AppendStartObject ¶
func (*Logger) CanAddStartArray ¶
func (*Logger) CanAddStartObject ¶
func (*Logger) CanAppendArray ¶
func (*Logger) CanAppendBool ¶
func (*Logger) CanAppendError ¶
func (*Logger) CanAppendFloat32 ¶
func (*Logger) CanAppendFloat64 ¶
func (*Logger) CanAppendInt ¶
func (*Logger) CanAppendInt64 ¶
func (*Logger) CanAppendObject ¶
func (*Logger) CanAppendStartArray ¶
func (*Logger) CanAppendStartObject ¶
func (*Logger) CanAppendString ¶
func (*Logger) CanAppendUint64 ¶
func (*Logger) CanSetArray ¶
func (*Logger) CanSetBool ¶
func (*Logger) CanSetError ¶
func (*Logger) CanSetFloat32 ¶
func (*Logger) CanSetFloat64 ¶
func (*Logger) CanSetInt64 ¶
func (*Logger) CanSetObject ¶
func (*Logger) CanSetStartArray ¶
func (*Logger) CanSetStartObject ¶
func (*Logger) CanSetString ¶
func (*Logger) CanSetUint64 ¶
func (*Logger) ReleaseEvent ¶
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 WithLevelField ¶
func WithMessageField ¶
func WithTimeField ¶
func WithWriter ¶
Click to show internal directories.
Click to hide internal directories.