FILE / ScuroNeko/SNekLog
levels.go
Исходный файл и его история в репозитории.
Golang lint / lint (push) Successful in 47s
- add godoc for SameLevel and Equal - update package docs and READMEs with new helpers - refresh unreleased release notes - add tests for Printf, HTTP method levels, and level constructors
246 lines
7.6 KiB
Go
246 lines
7.6 KiB
Go
package sneklog
|
|
|
|
// Predefined log levels.
|
|
var (
|
|
INFO = NewInfoLogLevelWithColors("info", FgWhite, BgNone)
|
|
WARN = NewWarnLogLevelWithColors("warn", FgHiYellow, BgNone)
|
|
ERROR = NewErrorLogLevelWithColors("error", FgHiRed, BgNone)
|
|
FATAL = NewFatalLogLevelWithColors("fatal", FgRed, BgNone)
|
|
DEBUG = NewDebugLogLevelWithColors("debug", FgGreen, BgNone)
|
|
)
|
|
|
|
// LogLevel describes a logging severity.
|
|
type LogLevel struct {
|
|
n uint8
|
|
t string
|
|
|
|
fg FgColor
|
|
fg256 FgColor256
|
|
fgRgb FgColorRGB
|
|
|
|
bg BgColor
|
|
bg256 BgColor256
|
|
bgRgb BgColorRGB
|
|
|
|
attrs []Attribute
|
|
}
|
|
|
|
// NewLogLevel creates a log level without predefined colors.
|
|
func NewLogLevel(index uint8, name string) LogLevel {
|
|
return NewLogLevelWithColors(index, name, 0, 0)
|
|
}
|
|
|
|
// NewLogLevelWithColors creates a log level with ANSI foreground and background colors.
|
|
func NewLogLevelWithColors(index uint8, name string, fg FgColor, bg BgColor) LogLevel {
|
|
return LogLevel{n: index, t: name, fg: fg, bg: bg, attrs: []Attribute{}}
|
|
}
|
|
|
|
// NewInfoLogLevel creates an info-level log level without predefined colors.
|
|
func NewInfoLogLevel(name string) LogLevel { return NewLogLevel(0, name) }
|
|
|
|
// NewInfoLogLevelWithColors creates an info-level log level with ANSI colors.
|
|
func NewInfoLogLevelWithColors(name string, fg FgColor, bg BgColor) LogLevel {
|
|
return NewLogLevelWithColors(0, name, fg, bg)
|
|
}
|
|
|
|
// NewWarnLogLevel creates a warn-level log level without predefined colors.
|
|
func NewWarnLogLevel(name string) LogLevel { return NewLogLevel(1, name) }
|
|
|
|
// NewWarnLogLevelWithColors creates a warn-level log level with ANSI colors.
|
|
func NewWarnLogLevelWithColors(name string, fg FgColor, bg BgColor) LogLevel {
|
|
return NewLogLevelWithColors(1, name, fg, bg)
|
|
}
|
|
|
|
// NewErrorLogLevel creates an error-level log level without predefined colors.
|
|
func NewErrorLogLevel(name string) LogLevel { return NewLogLevel(2, name) }
|
|
|
|
// NewErrorLogLevelWithColors creates an error-level log level with ANSI colors.
|
|
func NewErrorLogLevelWithColors(name string, fg FgColor, bg BgColor) LogLevel {
|
|
return NewLogLevelWithColors(2, name, fg, bg)
|
|
}
|
|
|
|
// NewFatalLogLevel creates a fatal-level log level without predefined colors.
|
|
func NewFatalLogLevel(name string) LogLevel { return NewLogLevel(3, name) }
|
|
|
|
// NewFatalLogLevelWithColors creates a fatal-level log level with ANSI colors.
|
|
func NewFatalLogLevelWithColors(name string, fg FgColor, bg BgColor) LogLevel {
|
|
return NewLogLevelWithColors(3, name, fg, bg)
|
|
}
|
|
|
|
// NewDebugLogLevel creates a debug-level log level without predefined colors.
|
|
func NewDebugLogLevel(name string) LogLevel { return NewLogLevel(4, name) }
|
|
|
|
// NewDebugLogLevelWithColors creates a debug-level log level with ANSI colors.
|
|
func NewDebugLogLevelWithColors(name string, fg FgColor, bg BgColor) LogLevel {
|
|
return NewLogLevelWithColors(4, name, fg, bg)
|
|
}
|
|
|
|
// GetName returns the lowercase textual representation of the level.
|
|
func (l *LogLevel) GetName() string { return l.t }
|
|
|
|
// SetFgColor sets the ANSI foreground color and clears other foreground color modes.
|
|
// Deprecated: use SetForegroundColor. This method will be removed in v3.
|
|
func (l *LogLevel) SetFgColor(color FgColor) *LogLevel {
|
|
return l.SetForegroundColor(color)
|
|
}
|
|
|
|
// GetFgColor returns the ANSI foreground color for the level.
|
|
// Deprecated: use GetForegroundColor. This method will be removed in v3.
|
|
func (l *LogLevel) GetFgColor() FgColor { return l.GetForegroundColor() }
|
|
|
|
// SetForegroundColor sets the ANSI foreground color and clears other foreground color modes.
|
|
func (l *LogLevel) SetForegroundColor(color FgColor) *LogLevel {
|
|
l.fg = color
|
|
l.fg256 = 0
|
|
l.fgRgb = nil
|
|
return l
|
|
}
|
|
|
|
// GetForegroundColor returns the ANSI foreground color for the level.
|
|
func (l *LogLevel) GetForegroundColor() FgColor { return l.fg }
|
|
|
|
// SetForeground256Color sets the 256-color foreground and clears other foreground color modes.
|
|
func (l *LogLevel) SetForeground256Color(color FgColor256) *LogLevel {
|
|
l.fg = 0
|
|
l.fg256 = color
|
|
l.fgRgb = nil
|
|
return l
|
|
}
|
|
|
|
// GetForeground256Color returns the configured 256-color foreground value.
|
|
func (l *LogLevel) GetForeground256Color() FgColor256 { return l.fg256 }
|
|
|
|
// SetForegroundRGB sets the RGB foreground color and clears other foreground color modes.
|
|
func (l *LogLevel) SetForegroundRGB(r, g, b uint8) *LogLevel {
|
|
l.fg = 0
|
|
l.fg256 = 0
|
|
l.fgRgb = FgColorRGB{r, g, b}
|
|
return l
|
|
}
|
|
|
|
// GetForegroundRGB returns the configured RGB foreground value.
|
|
func (l *LogLevel) GetForegroundRGB() FgColorRGB { return l.fgRgb }
|
|
|
|
// SetBgColor sets the ANSI background color and clears other background color modes.
|
|
// Deprecated: use SetBackgroundColor. This method will be removed in v3.
|
|
func (l *LogLevel) SetBgColor(color BgColor) *LogLevel {
|
|
return l.SetBackgroundColor(color)
|
|
}
|
|
|
|
// GetBgColor returns the ANSI background color for the level.
|
|
// Deprecated: use GetBackgroundColor. This method will be removed in v3.
|
|
func (l *LogLevel) GetBgColor() BgColor { return l.GetBackgroundColor() }
|
|
|
|
// SetBackgroundColor sets the ANSI background color and clears other background color modes.
|
|
func (l *LogLevel) SetBackgroundColor(color BgColor) *LogLevel {
|
|
l.bg = color
|
|
l.bg256 = 0
|
|
l.bgRgb = nil
|
|
return l
|
|
}
|
|
|
|
// GetBackgroundColor returns the ANSI background color for the level.
|
|
func (l *LogLevel) GetBackgroundColor() BgColor { return l.bg }
|
|
|
|
// SetBackground256Color sets the 256-color background and clears other background color modes.
|
|
func (l *LogLevel) SetBackground256Color(color BgColor256) *LogLevel {
|
|
l.bg = 0
|
|
l.bg256 = color
|
|
l.bgRgb = nil
|
|
return l
|
|
}
|
|
|
|
// GetBackground256Color returns the configured 256-color background value.
|
|
func (l *LogLevel) GetBackground256Color() BgColor256 { return l.bg256 }
|
|
|
|
// SetBackgroundRGB sets the RGB background color and clears other background color modes.
|
|
func (l *LogLevel) SetBackgroundRGB(r, g, b uint8) *LogLevel {
|
|
l.bg = 0
|
|
l.bg256 = 0
|
|
l.bgRgb = BgColorRGB{r, g, b}
|
|
return l
|
|
}
|
|
|
|
// GetBackgroundRGB returns the configured RGB background value.
|
|
func (l *LogLevel) GetBackgroundRGB() BgColorRGB { return l.bgRgb }
|
|
|
|
// AddAttribute appends an ANSI text attribute to the level.
|
|
func (l *LogLevel) AddAttribute(a Attribute) *LogLevel {
|
|
l.attrs = append(l.attrs, a)
|
|
return l
|
|
}
|
|
|
|
// RemoveAttribute removes all matching ANSI text attributes from the level.
|
|
func (l *LogLevel) RemoveAttribute(a Attribute) *LogLevel {
|
|
attrs := make([]Attribute, 0)
|
|
for _, attr := range l.attrs {
|
|
if attr != a {
|
|
attrs = append(attrs, attr)
|
|
}
|
|
}
|
|
l.attrs = attrs
|
|
return l
|
|
}
|
|
|
|
// SetAttributes replaces the level attributes with a copy of the provided slice.
|
|
func (l *LogLevel) SetAttributes(a []Attribute) *LogLevel {
|
|
attrs := make([]Attribute, len(a))
|
|
copy(attrs, a)
|
|
l.attrs = attrs
|
|
return l
|
|
}
|
|
|
|
// GetAttributes returns a copy of the configured ANSI text attributes.
|
|
func (l *LogLevel) GetAttributes() []Attribute {
|
|
attrs := make([]Attribute, len(l.attrs))
|
|
copy(attrs, l.attrs)
|
|
return attrs
|
|
}
|
|
|
|
// SameLevel reports whether two log levels have the same severity index.
|
|
func (l *LogLevel) SameLevel(other LogLevel) bool {
|
|
return l.n == other.n
|
|
}
|
|
|
|
// Equal reports whether two log levels have identical configuration.
|
|
func (l *LogLevel) Equal(other LogLevel) bool {
|
|
if l.t != other.t || l.n != other.n {
|
|
return false
|
|
}
|
|
if l.fg != other.fg || l.bg != other.bg {
|
|
return false
|
|
}
|
|
|
|
if l.fg256 != other.fg256 || l.bg256 != other.bg256 {
|
|
return false
|
|
}
|
|
|
|
if len(l.attrs) != len(other.attrs) {
|
|
return false
|
|
}
|
|
for i := range l.attrs {
|
|
if l.attrs[i] != other.attrs[i] {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if len(l.fgRgb) != len(other.fgRgb) {
|
|
return false
|
|
}
|
|
for i := range l.fgRgb {
|
|
if l.fgRgb[i] != other.fgRgb[i] {
|
|
return false
|
|
}
|
|
}
|
|
|
|
if len(l.bgRgb) != len(other.bgRgb) {
|
|
return false
|
|
}
|
|
for i := range l.bgRgb {
|
|
if l.bgRgb[i] != other.bgRgb[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|