You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.5 KiB

package logger
import "go.uber.org/zap"
type fieldType int
const (
fieldTypeString fieldType = iota
fieldTypeUint64
fieldTypeFloat64
)
// Field - alias типов логов для работы с fieldStorage.
// В дальнейшем надо бы использовать для самого пакета логера, чтобы абстрагироваться от внешнего пакета zap.
type Field struct {
typeOf fieldType
key string
value interface{}
}
// External - каст типов под внешний логер. Если будут добавлены новые типы для обработки, надо расширять кастинг,
// по аналогии с FieldUint64.
func (f *Field) External() zap.Field {
switch f.typeOf {
case fieldTypeString:
{
if v, ok := f.value.(string); ok {
return zap.String(f.key, v)
}
}
case fieldTypeUint64:
{
if v, ok := f.value.(uint64); ok {
return zap.Uint64(f.key, v)
}
}
case fieldTypeFloat64:
{
if v, ok := f.value.(float64); ok {
return zap.Float64(f.key, v)
}
}
}
return zap.String("warn", "Field type is not found")
}
func FieldString(key string, val string) Field {
return Field{
typeOf: fieldTypeString,
key: key,
value: val,
}
}
func FieldUint64(key string, val uint64) Field {
return Field{
typeOf: fieldTypeUint64,
key: key,
value: val,
}
}
func FieldFloat64(key string, val float64) Field {
return Field{
typeOf: fieldTypeFloat64,
key: key,
value: val,
}
}