fields.go raw

   1  package log
   2  
   3  import (
   4  	"slices"
   5  )
   6  
   7  // Fields is a helper type used for logging
   8  type Fields map[string]interface{}
   9  
  10  // Fields implements Fielder.
  11  func (f Fields) Fields() Fields {
  12  	return f
  13  }
  14  
  15  // Get returns flatten Fields map
  16  func (f Fields) Get() []any {
  17  
  18  	keys := make([]string, 0, len(f))
  19  	for key := range f {
  20  		keys = append(keys, key)
  21  	}
  22  	// Sort keys for consistent output
  23  	slices.Sort(keys)
  24  
  25  	out := make([]any, 0, len(f)*2)
  26  	for _, key := range keys {
  27  		out = append(out, key, f[key])
  28  	}
  29  	return out
  30  }
  31  
  32  // Fielder interface allows for creating custom Fields
  33  type Fielder interface {
  34  	Fields() Fields
  35  }
  36