(new): add log level helpers and HTTP method levels
Golang lint / lint (push) Successful in 42s

- move LogLevel and predefined levels into levels.go
- add level-specific constructors for info/warn/error/fatal/debug
- add predefined HTTP method log levels and LogLevelForMethod
- unify Logger Print/Println internals and add Printf
- improve GoDoc coverage for exported APIs
This commit is contained in:
2026-04-27 16:36:30 +03:00
parent 3eac1851ec
commit 812caed471
8 changed files with 356 additions and 192 deletions
+46
View File
@@ -1,3 +1,49 @@
# v2.2.0
This release adds new public APIs for working with log levels, introduces HTTP method-specific log levels, and improves package documentation.
### Added
- Added dedicated log level constructors:
- `NewInfoLogLevel`
- `NewInfoLogLevelWithColors`
- `NewWarnLogLevel`
- `NewWarnLogLevelWithColors`
- `NewErrorLogLevel`
- `NewErrorLogLevelWithColors`
- `NewFatalLogLevel`
- `NewFatalLogLevelWithColors`
- `NewDebugLogLevel`
- `NewDebugLogLevelWithColors`
- Added HTTP method-specific predefined log levels:
- `HTTPGetLevel`
- `HTTPHeadLevel`
- `HTTPPostLevel`
- `HTTPPutLevel`
- `HTTPPatchLevel`
- `HTTPDeleteLevel`
- `HTTPOptionsLevel`
- `HTTPConnectLevel`
- `HTTPTraceLevel`
- `HTTPUnknownLevel`
- Added `LogLevelForMethod(method string) LogLevel` to map HTTP methods to predefined log levels.
- Added `Logger.Printf(level, format, args...)` for formatted logging with an explicit log level.
### Changed
- Refactored log level definitions into a dedicated `levels.go` file.
- Unified `Logger.Print` and `Logger.Println` through a shared internal implementation without changing their behavior.
### Documentation
- Improved GoDoc coverage for exported types, constructors, formatters, colors, HTTP helpers, and time layouts.
- Expanded inline documentation for formatter tokens and default formatter behavior.
### Compatibility
- No breaking API changes.
- Existing `Print`, `Println`, predefined levels, and color APIs remain compatible.
# v2.1.0 # v2.1.0
This release expands sneklog color customization while preserving compatibility with the v2.0.1 API. This release expands sneklog color customization while preserving compatibility with the v2.0.1 API.
+26 -1
View File
@@ -5,12 +5,25 @@ import (
"strings" "strings"
) )
// FgColor is a basic ANSI foreground color code.
type FgColor uint8 type FgColor uint8
// BgColor is a basic ANSI background color code.
type BgColor uint8 type BgColor uint8
// FgColor256 is an ANSI 256-color foreground value.
type FgColor256 uint8 type FgColor256 uint8
// BgColor256 is an ANSI 256-color background value.
type BgColor256 uint8 type BgColor256 uint8
// BgColorRGB is an ANSI truecolor background value encoded as RGB bytes.
type BgColorRGB []uint8 type BgColorRGB []uint8
// FgColorRGB is an ANSI truecolor foreground value encoded as RGB bytes.
type FgColorRGB []uint8 type FgColorRGB []uint8
// Attribute is an ANSI text attribute code.
type Attribute uint8 type Attribute uint8
// NewBgColorRGB builds an RGB background color value. // NewBgColorRGB builds an RGB background color value.
@@ -23,6 +36,7 @@ func NewFgColorRGB(r, g, b uint8) FgColorRGB {
return FgColorRGB{r, g, b} return FgColorRGB{r, g, b}
} }
// Text attribute codes.
const ( const (
Reset Attribute = iota Reset Attribute = iota
Bold Bold
@@ -35,6 +49,8 @@ const (
Conceal Conceal
CrossedOut CrossedOut
) )
// Additional text attribute codes.
const ( const (
DoubleUnderline Attribute = iota + 21 // Can be disable bold on some terminals DoubleUnderline Attribute = iota + 21 // Can be disable bold on some terminals
DisableBold DisableBold
@@ -45,6 +61,8 @@ const (
DisableConceal DisableConceal
DisableCrossedOut DisableCrossedOut
) )
// Basic foreground color codes.
const ( const (
FgNone = 0 FgNone = 0
FgBlack FgColor = iota + 30 FgBlack FgColor = iota + 30
@@ -57,6 +75,8 @@ const (
FgWhite FgWhite
FgDefault FgColor = 39 FgDefault FgColor = 39
) )
// Basic background color codes.
const ( const (
BgNone = 0 BgNone = 0
BgBlack BgColor = iota + 40 BgBlack BgColor = iota + 40
@@ -69,6 +89,8 @@ const (
BgWhite BgWhite
BgDefault BgColor = 49 BgDefault BgColor = 49
) )
// High-intensity foreground color codes.
const ( const (
FgHiBlack FgColor = iota + 90 FgHiBlack FgColor = iota + 90
FgHiRed FgHiRed
@@ -79,6 +101,8 @@ const (
FgHiCyan FgHiCyan
FgHiWhite FgHiWhite
) )
// High-intensity background color codes.
const ( const (
BgHiBlack BgColor = iota + 100 BgHiBlack BgColor = iota + 100
BgHiRed BgHiRed
@@ -90,7 +114,7 @@ const (
BgHiWhite BgHiWhite
) )
// This attributes rarely used and not supported by all terminals. // Rarely used text attribute codes that are not supported by all terminals.
const ( const (
Border Attribute = iota + 51 Border Attribute = iota + 51
Outline Outline
@@ -99,6 +123,7 @@ const (
DisableUpperline DisableUpperline
) )
// ColorStringBuilder incrementally builds ANSI-colored strings.
type ColorStringBuilder struct { type ColorStringBuilder struct {
str string str string
} }
+23 -8
View File
@@ -6,16 +6,28 @@ import (
"time" "time"
) )
// Formatter // Formatter configures how log records are rendered.
// Format: %t - time, %N - name, %l - level, %L - level uppercase, %b - traceback, %B - full traceback, %m - message,
// %M - method, %f - filename, %n - line number, %s - method signature, %p - full path
// Example: "%t [%l] %N: %m (%f:%n %s)"
// //
// TimeStampFormat: %Y - year, %m - month, %d - day, %H - hour, %M - minute, %S - second, // Format tokens:
// %z - timezone(i.e. 0300), %Z - timezone(i.e. 03:00) // - %t: time
// Example: "%d.%m.%Y %H:%M:%S" // - %N: name
// - %l: level
// - %L: uppercase level
// - %b: first traceback frame
// - %B: full traceback
// - %m: message
// - %M: method
// - %f: filename
// - %n: line number
// - %s: method signature
// - %p: full path
// //
// TraceBackFormat: %M - method, %f - filename, %n - line number, %s - method signature, %p - full path // Example format: "%t [%l] %N: %m (%f:%n %s)"
//
// TimeStampFormat uses strftime-like directives such as %Y, %m, %d, %H, %M,
// %S, %z, and %Z.
//
// TraceBackFormat supports the traceback-related tokens %M, %f, %n, %s, and %p.
type Formatter struct { type Formatter struct {
Format string Format string
MessageSeparator string MessageSeparator string
@@ -31,6 +43,7 @@ type Formatter struct {
ColorOnlyStdout bool ColorOnlyStdout bool
} }
// DefaultTextFormatter is the default formatter used by text writers.
var DefaultTextFormatter = &Formatter{ var DefaultTextFormatter = &Formatter{
Format: "%t %l %N: %m", Format: "%t %l %N: %m",
MessageSeparator: " ", MessageSeparator: " ",
@@ -40,6 +53,8 @@ var DefaultTextFormatter = &Formatter{
ColorOutput: true, ColorOutput: true,
ColorOnlyStdout: true, ColorOnlyStdout: true,
} }
// DefaultJsonFormatter is the default formatter used by JSON writers.
var DefaultJsonFormatter = &Formatter{ var DefaultJsonFormatter = &Formatter{
Format: "%m", Format: "%m",
MessageSeparator: " ", MessageSeparator: " ",
+47
View File
@@ -0,0 +1,47 @@
package sneklog
import "net/http"
// HTTP method-specific log levels.
var (
HTTPGetLevel = NewInfoLogLevelWithColors("get", FgGreen, BgNone)
HTTPHeadLevel = NewInfoLogLevelWithColors("head", FgCyan, BgNone)
HTTPPostLevel = NewInfoLogLevelWithColors("post", FgBlue, BgNone)
HTTPPutLevel = NewInfoLogLevelWithColors("put", FgYellow, BgNone)
HTTPPatchLevel = NewInfoLogLevelWithColors("patch", FgMagenta, BgNone)
HTTPDeleteLevel = NewInfoLogLevelWithColors("delete", FgRed, BgNone)
)
// Additional HTTP method-specific log levels.
var (
HTTPOptionsLevel = NewDebugLogLevelWithColors("options", FgWhite, BgNone)
HTTPConnectLevel = NewDebugLogLevelWithColors("connect", FgCyan, BgNone)
HTTPTraceLevel = NewDebugLogLevelWithColors("trace", FgWhite, BgNone)
HTTPUnknownLevel = NewDebugLogLevelWithColors("http", FgWhite, BgNone)
)
// LogLevelForMethod returns the predefined log level associated with an HTTP method.
func LogLevelForMethod(method string) LogLevel {
switch method {
case http.MethodGet:
return HTTPGetLevel
case http.MethodHead:
return HTTPHeadLevel
case http.MethodPost:
return HTTPPostLevel
case http.MethodPut:
return HTTPPutLevel
case http.MethodPatch:
return HTTPPatchLevel
case http.MethodDelete:
return HTTPDeleteLevel
case http.MethodOptions:
return HTTPOptionsLevel
case http.MethodConnect:
return HTTPConnectLevel
case http.MethodTrace:
return HTTPTraceLevel
default:
return HTTPUnknownLevel
}
}
+15 -26
View File
@@ -83,9 +83,7 @@ func (l *Logger) Debugln(m ...any) {
l.Println(DEBUG, m...) l.Println(DEBUG, m...)
} }
// Print write message without trailing "\n" func (l *Logger) print(level LogLevel, newline bool, m ...any) {
// Good for database
func (l *Logger) Print(level LogLevel, m ...any) {
if l.level.n < level.n { if l.level.n < level.n {
return return
} }
@@ -94,30 +92,10 @@ func (l *Logger) Print(level LogLevel, m ...any) {
} }
tb := getFullTraceback(1) tb := getFullTraceback(1)
for _, writer := range l.writers { messages := l.replaceAll(m...)
if writer == nil { if newline {
continue messages = append(messages, any("\n"))
}
err := writer.Print(level, l.prefix, tb, l.replaceAll(m...)...)
if err != nil {
l.reportWriterError(err)
}
} }
}
// Println
// Docker requires "\n" at end to write to log.
// print not work for docker, otherwise it will work and write into stdout
func (l *Logger) Println(level LogLevel, m ...any) {
if l.level.n < level.n {
return
}
if len(l.writers) == 0 {
return
}
tb := getFullTraceback(1)
messages := append(append(make([]any, 0, len(m)+1), l.replaceAll(m...)...), "\n")
for _, writer := range l.writers { for _, writer := range l.writers {
if writer == nil { if writer == nil {
continue continue
@@ -129,6 +107,17 @@ func (l *Logger) Println(level LogLevel, m ...any) {
} }
} }
// Print logs a message without appending a trailing newline semantic.
func (l *Logger) Print(level LogLevel, m ...any) { l.print(level, false, m...) }
// Println logs a message and appends a trailing newline semantic for writers that need it.
func (l *Logger) Println(level LogLevel, m ...any) { l.print(level, true, m...) }
// Printf formats according to a format specifier and logs the resulting message.
func (l *Logger) Printf(level LogLevel, format string, args ...any) {
l.print(level, false, fmt.Sprintf(format, args...))
}
// reportWriterError writes internal writer failures directly to stderr to avoid // reportWriterError writes internal writer failures directly to stderr to avoid
// re-entering the same logger path that just failed. // re-entering the same logger path that just failed.
func (l *Logger) reportWriterError(err error) { func (l *Logger) reportWriterError(err error) {
+198
View File
@@ -0,0 +1,198 @@
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
}
-157
View File
@@ -7,154 +7,6 @@ import (
"strings" "strings"
) )
// 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 LogLevel{n: index, t: name, attrs: []Attribute{}}
}
// 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{}}
}
// 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
}
// MethodTraceback describes a single stack frame attached to a log entry. // MethodTraceback describes a single stack frame attached to a log entry.
type MethodTraceback struct { type MethodTraceback struct {
Method string `json:"method"` Method string `json:"method"`
@@ -164,15 +16,6 @@ type MethodTraceback struct {
FullPath string `json:"fullPath"` FullPath string `json:"fullPath"`
} }
// Predefined log levels.
var (
INFO = NewLogLevelWithColors(0, "info", FgWhite, BgNone)
WARN = NewLogLevelWithColors(1, "warn", FgHiYellow, BgNone)
ERROR = NewLogLevelWithColors(2, "error", FgHiRed, BgNone)
FATAL = NewLogLevelWithColors(3, "fatal", FgRed, BgNone)
DEBUG = NewLogLevelWithColors(4, "debug", FgGreen, BgNone)
)
// Logger routes log records to one or more configured writers. // Logger routes log records to one or more configured writers.
type Logger struct { type Logger struct {
prefix string prefix string
+1
View File
@@ -2,6 +2,7 @@ package sneklog
import "strings" import "strings"
// Predefined strftime-like time layouts.
const ( const (
Layout = "%m/%d %I:%M:%S%p '%y %z" Layout = "%m/%d %I:%M:%S%p '%y %z"
ANSIC = "%a %b %e %H:%M:%S %Y" ANSIC = "%a %b %e %H:%M:%S %Y"