ntfy/log/types.go

108 lines
1.9 KiB
Go
Raw Normal View History

2023-02-04 03:21:50 +00:00
package log
import (
"encoding/json"
"strings"
)
// Level is a well-known log level, as defined below
type Level int
// Well known log levels
const (
TraceLevel Level = iota
DebugLevel
InfoLevel
WarnLevel
ErrorLevel
FatalLevel
)
func (l Level) String() string {
switch l {
case TraceLevel:
return "TRACE"
case DebugLevel:
return "DEBUG"
case InfoLevel:
return "INFO"
case WarnLevel:
return "WARN"
case ErrorLevel:
return "ERROR"
case FatalLevel:
return "FATAL"
}
return "unknown"
}
2023-02-06 04:53:24 +00:00
// MarshalJSON converts a level to a JSON string
2023-02-04 03:21:50 +00:00
func (l Level) MarshalJSON() ([]byte, error) {
return json.Marshal(l.String())
}
// ToLevel converts a string to a Level. It returns InfoLevel if the string
// does not match any known log levels.
func ToLevel(s string) Level {
switch strings.ToUpper(s) {
case "TRACE":
return TraceLevel
case "DEBUG":
return DebugLevel
case "INFO":
return InfoLevel
case "WARN", "WARNING":
return WarnLevel
case "ERROR":
return ErrorLevel
default:
return InfoLevel
}
}
// Format is a well-known log format
type Format int
// Log formats
const (
TextFormat Format = iota
JSONFormat
)
func (f Format) String() string {
switch f {
case TextFormat:
return "text"
case JSONFormat:
return "json"
}
return "unknown"
}
// ToFormat converts a string to a Format. It returns TextFormat if the string
// does not match any known log formats.
func ToFormat(s string) Format {
switch strings.ToLower(s) {
case "text":
return TextFormat
case "json":
return JSONFormat
default:
return TextFormat
}
}
2023-02-06 04:34:27 +00:00
// Contexter allows structs to export a key-value pairs in the form of a Context
2023-02-05 02:26:01 +00:00
type Contexter interface {
2023-02-06 04:34:27 +00:00
// Context returns the object context as key-value pairs
Context() Context
2023-02-04 03:21:50 +00:00
}
2023-02-06 04:34:27 +00:00
// Context represents an object's state in the form of key-value pairs
type Context map[string]any
2023-02-04 03:21:50 +00:00
type levelOverride struct {
value any
level Level
}