Documentation
¶
Overview ¶
Package log provide a general log interface Usage:
import "github.com/askasoft/pango/log"
log := log.NewLog() log.SetWriter(log.NewAsyncWriter(log.NewConsoleWriter()))
Use it like this:
log.Fatal("fatal")
log.Error("error")
log.Warn("warning")
log.Info("info")
log.Debug("debug")
log.Trace("trace")
A Logger with name:
log := log.GetLogger("foo")
log.Debug("hello")
Index ¶
- Variables
- func Close()
- func Config(filename string) error
- func ConfigWriter(w Writer, c map[string]any) error
- func Debug(v ...any)
- func Debugf(f string, v ...any)
- func Error(v ...any)
- func Errorf(f string, v ...any)
- func Fatal(code int, v ...any)
- func Fatalf(code int, f string, v ...any)
- func Flush()
- func GetCallerSkip() int
- func GetProp(k string) any
- func GetProps() map[string]any
- func Info(v ...any)
- func Infof(f string, v ...any)
- func IsDebugEnabled() bool
- func IsErrorEnabled() bool
- func IsFatalEnabled() bool
- func IsInfoEnabled() bool
- func IsTraceEnabled() bool
- func IsWarnEnabled() bool
- func Perror(a any)
- func Perrorf(format string, a ...any)
- func RegisterFilter(name string, fc FilterCreator)
- func RegisterWriter(name string, wc WriterCreator)
- func SetCallerSkip(n int)
- func SetLevel(lvl Level)
- func SetLevels(lvls map[string]Level)
- func SetProp(k string, v any)
- func SetProps(props map[string]any)
- func SetWriter(lw Writer)
- func SwitchWriter(lw Writer)
- func Trace(v ...any)
- func Tracef(f string, v ...any)
- func Warn(v ...any)
- func Warnf(f string, v ...any)
- type AndFilter
- type AsyncWriter
- type BatchSupport
- type BridgeWriter
- type ConnWriter
- type Event
- type EventBuffer
- type FileWriter
- type Filter
- type FilterCreator
- type FilterSupport
- type FormatSupport
- type Formatter
- type JSONFormatter
- type Level
- type LevelFilter
- type Log
- func (log *Log) Close()
- func (log *Log) Config(filename string) error
- func (log *Log) Debug(v ...any)
- func (log *Log) Debugf(f string, v ...any)
- func (log *Log) Error(v ...any)
- func (log *Log) Errorf(f string, v ...any)
- func (log *Log) Fatal(code int, v ...any)
- func (log *Log) Fatalf(code int, f string, v ...any)
- func (log *Log) Flush()
- func (log *Log) GetCallerSkip() int
- func (log *Log) GetLevel() Level
- func (log *Log) GetLogger(name string) Logger
- func (log *Log) GetLoggerLevel(name string) Level
- func (log *Log) GetName() string
- func (log *Log) GetOutputer(name string, lvl Level, callerSkip ...int) Outputer
- func (log *Log) GetProp(k string) any
- func (log *Log) GetProps() map[string]any
- func (log *Log) GetTraceLevel() Level
- func (log *Log) GetWriter() Writer
- func (log *Log) Info(v ...any)
- func (log *Log) Infof(f string, v ...any)
- func (log *Log) IsDebugEnabled() bool
- func (log *Log) IsErrorEnabled() bool
- func (log *Log) IsFatalEnabled() bool
- func (log *Log) IsInfoEnabled() bool
- func (log *Log) IsLevelEnabled(lvl Level) bool
- func (log *Log) IsTraceEnabled() bool
- func (log *Log) IsWarnEnabled() bool
- func (log *Log) Log(lvl Level, v ...any)
- func (log *Log) Logf(lvl Level, f string, v ...any)
- func (log *Log) SetCallerSkip(n int)
- func (log *Log) SetLevel(lvl Level)
- func (log *Log) SetLevels(lvls map[string]Level)
- func (log *Log) SetProp(k string, v any)
- func (log *Log) SetProps(props map[string]any)
- func (log *Log) SetTraceLevel(lvl Level)
- func (log *Log) SetWriter(lw Writer)
- func (log *Log) SwitchWriter(lw Writer)
- func (log *Log) Trace(v ...any)
- func (log *Log) Tracef(f string, v ...any)
- func (log *Log) Warn(v ...any)
- func (log *Log) Warnf(f string, v ...any)
- func (log *Log) Write(le *Event)
- type Logger
- type MultiWriter
- type NameFilter
- type NameNotFilter
- type NopWriter
- type OrFilter
- type Outputer
- type RetrySupport
- type StreamWriter
- type SubjectSuport
- type SyncWriter
- type TextFormatter
- type Writer
- type WriterCreator
Constants ¶
This section is empty.
Variables ¶
var EOL = iox.EOL
EOL windows: "\r\n" other: "\n"
var JSONFmtDefault = newJSONFormatter(`{"time": %t, "level": %l, "name": %c, "host": %h, "file": %S, "line": %L, "func": %F, "msg": %m, "trace": %T}%n`)
JSONFmtDefault default log format `{"time": %t, "level": %l, "name": %c, "host": %h, "file": %S, "line": %L, "func": %F, "msg": %m, "trace": %T}%n`
var (
MaxCallerFrames = 50
)
var TextFmtDefault = newTextFormatter("%t %l{-5s} %c %S:%L %F() - %m%n%T")
TextFmtDefault default log format "%t %l{-5s} %c %S:%L %F() - %m%n%T"
var TextFmtSimple = newTextFormatter("[%p] %m%n")
TextFmtSimple simple log format "[%p] %m%n"
var TextFmtSubject = newTextFormatter("[%l] %m")
TextFmtSubject subject log format "[%l] %m"
Functions ¶
func ConfigWriter ¶
ConfigWriter config the writer by the configuration map 'c'
func Fatalf ¶
Fatalf format and print a message at fatal level, close the logs and call os.Exit(code).
func GetCallerSkip ¶ added in v1.0.27
func GetCallerSkip() int
GetCallerSkip return the logger's caller skip
func RegisterFilter ¶
func RegisterFilter(name string, fc FilterCreator)
RegisterFilter register log filter type
func RegisterWriter ¶
func RegisterWriter(name string, wc WriterCreator)
RegisterWriter register log writer type
func SetCallerSkip ¶ added in v1.0.27
func SetCallerSkip(n int)
SetCallerSkip set the logger's caller skip (!!SLOW!!), 0: disable runtime.Caller()
func SwitchWriter ¶ added in v1.0.27
func SwitchWriter(lw Writer)
SwitchWriter use lw to replace the log writer
Types ¶
type AndFilter ¶ added in v1.0.27
type AndFilter struct {
Filters []Filter
}
AndFilter a AND multiple filter
func NewAndFilter ¶ added in v1.0.27
NewAndFilter create a AND multiple filter
type AsyncWriter ¶
type AsyncWriter struct {
// contains filtered or unexported fields
}
AsyncWriter wrapper a log writer to implement asynchrous write
func NewAsyncWriter ¶
func NewAsyncWriter(w Writer, size int) *AsyncWriter
NewAsyncWriter create a async writer and start go routine
func (*AsyncWriter) Close ¶
func (aw *AsyncWriter) Close()
Close Close the underlying writer and wait it for done
func (*AsyncWriter) SetWriter ¶
func (aw *AsyncWriter) SetWriter(w Writer)
SetWriter send a "switch" signal to switch the writer to `w` and close the old writer
func (*AsyncWriter) Stop ¶
func (aw *AsyncWriter) Stop()
Stop send a "stop" signal to the run() go-routine
func (*AsyncWriter) Wait ¶ added in v1.0.27
func (aw *AsyncWriter) Wait()
Wait wait for the run() go-routine exit
type BatchSupport ¶ added in v1.0.27
type BatchSupport struct {
BatchCount int // flush events if events count >= BatchCount
CacheCount int // the maximun cacheable event count
FlushLevel Level // flush events if event <= FlushLevel
FlushDelta time.Duration // flush events if [time.Now()] - [first log event time] >= FlushDelta
BatchBuffer EventBuffer
}
BatchSupport support event cache and flush events on FlushLevel or BatchCount reached.
func (*BatchSupport) BatchFlush ¶ added in v1.0.27
func (bs *BatchSupport) BatchFlush(flush func(*EventBuffer) error)
func (*BatchSupport) BatchWrite ¶ added in v1.0.27
func (bs *BatchSupport) BatchWrite(le *Event, flush func(*EventBuffer) error)
func (*BatchSupport) SetFlushLevel ¶ added in v1.0.27
func (bs *BatchSupport) SetFlushLevel(lvl string)
SetFlushLevel set the flush level
type BridgeWriter ¶ added in v1.0.10
type BridgeWriter struct {
Logger Logger
}
func NewBridgeWriter ¶ added in v1.0.10
func NewBridgeWriter(logger Logger) *BridgeWriter
func (*BridgeWriter) Close ¶ added in v1.0.10
func (bw *BridgeWriter) Close()
func (*BridgeWriter) Flush ¶ added in v1.0.10
func (bw *BridgeWriter) Flush()
func (*BridgeWriter) Write ¶ added in v1.0.10
func (bw *BridgeWriter) Write(le *Event)
type ConnWriter ¶
type ConnWriter struct {
FilterSupport
FormatSupport
Net string
Addr string
Timeout time.Duration
// contains filtered or unexported fields
}
ConnWriter implements Writer. it writes messages in keep-live tcp connection.
func (*ConnWriter) SetTimeout ¶
func (cw *ConnWriter) SetTimeout(timeout string) error
SetTimeout set timeout
func (*ConnWriter) Write ¶
func (cw *ConnWriter) Write(le *Event)
Write write logger message to connection.
type Event ¶
type Event struct {
Name string
Props map[string]any
Level Level
Time time.Time
Message string
File string
Line int
Func string
Trace string
}
Event log event
func (*Event) CallerSkip ¶ added in v1.0.27
CallerSkip get caller filename and line number
func (*Event) CallerStop ¶ added in v1.0.10
CallerStop get caller filename and line number
type FileWriter ¶
type FileWriter struct {
FilterSupport
FormatSupport
Path string // Log file path name
DirPerm uint32 // Log dir permission
FilePerm uint32 // Log file permission
MaxSplit int // Max split files
MaxSize int64 // Rotate at size
MaxDays int // Max daily files
MaxHours int // Max hourly files
Gzip bool // Compress rotated log files
SyncLevel Level // Call File.Sync() if level <= SyncLevel
// contains filtered or unexported fields
}
FileWriter implements Writer. It writes messages and rotate by file size limit, daily, hourly.
func (*FileWriter) Close ¶
func (fw *FileWriter) Close()
Close close the file description, close file writer.
func (*FileWriter) Flush ¶
func (fw *FileWriter) Flush()
Flush flush file logger. there are no buffering messages in file logger in memory. flush file means sync file to disk.
func (*FileWriter) SetMaxSize ¶
func (fw *FileWriter) SetMaxSize(maxSize string)
SetMaxSize set the MaxSize
func (*FileWriter) SetSyncLevel ¶
func (fw *FileWriter) SetSyncLevel(lvl string)
SetSyncLevel set the sync level
func (*FileWriter) Write ¶
func (fw *FileWriter) Write(le *Event)
Write write logger message into file.
type Filter ¶
Filter log filter
func CreateFilter ¶
CreateFilter create a log filter by name and config
func NewLogFilter ¶
NewLogFilter parse filter expression to create a log filter
func NewNameNotFilter ¶
NewNameNotFilter create a name filter (not equal)
func ParseFilter ¶ added in v1.0.27
ParseFilter parse filter expression "name:condition" to create a log filter
type FilterSupport ¶ added in v1.0.27
type FilterSupport struct {
Filter Filter // log filter
}
func (*FilterSupport) Reject ¶ added in v1.0.27
func (fs *FilterSupport) Reject(le *Event) bool
func (*FilterSupport) SetFilter ¶ added in v1.0.27
func (fs *FilterSupport) SetFilter(filter string)
SetFilter set the log filter
type FormatSupport ¶ added in v1.0.27
type FormatSupport struct {
Formatter Formatter // log formatter
Buffer bytes.Buffer // log buffer
}
func (*FormatSupport) Append ¶ added in v1.0.27
func (fs *FormatSupport) Append(le *Event, df ...Formatter)
Append format the log event and append to buffer
func (*FormatSupport) Format ¶ added in v1.0.27
func (fs *FormatSupport) Format(le *Event, df ...Formatter) []byte
Format format the log event
func (*FormatSupport) GetFormatter ¶ added in v1.0.27
func (fs *FormatSupport) GetFormatter(le *Event, df ...Formatter) Formatter
Format format the log event
func (*FormatSupport) SetFormat ¶ added in v1.0.27
func (fs *FormatSupport) SetFormat(format string)
SetFormat set the log formatter
type Formatter ¶
Formatter log formatter interface
func NewLogFormatter ¶
NewLogFormatter create a text or json formatter text:[%p] %m%n -> TextFormatter json:{"level":%l, "msg": %m}%n -> JSONFormatter
type JSONFormatter ¶
type JSONFormatter struct {
// contains filtered or unexported fields
}
JSONFormatter json formatter
func NewJSONFormatter ¶
func NewJSONFormatter(format string) *JSONFormatter
NewJSONFormatter create a Json Formatter instance JSON Format %t{format}: time, if {format} is omitted, '2006-01-02T15:04:05.000Z07:00' will be used %c{format}: logger name %p{format}: log level prefix %l{format}: log level string %h{format}: hostname %e{key}: os environment variable %x{key}: logger property %X: logger properties (json format) %S: caller source file name %L: caller source line number %F: caller function name %T: caller stack trace %m: message %n: EOL(Windows: "\r\n", Other: "\n")
func (*JSONFormatter) SetFormat ¶ added in v1.0.12
func (jf *JSONFormatter) SetFormat(format string)
SetFormat initialize the json formatter
type LevelFilter ¶
type LevelFilter struct {
Level Level
}
LevelFilter log level filter
func NewLevelFilter ¶
func NewLevelFilter(lvl Level) *LevelFilter
NewLevelFilter create a level filter
func (*LevelFilter) Reject ¶
func (lf *LevelFilter) Reject(le *Event) bool
Reject filter event by logger name
type Log ¶
type Log struct {
// contains filtered or unexported fields
}
Log is default logger in application. it can contain several writers and log message into all writers.
func Default ¶
func Default() *Log
Default returns the default Log instance used by the package-level functions.
func (*Log) Close ¶
func (log *Log) Close()
Close close logger, flush all data and close the writer.
func (*Log) Fatalf ¶
Fatalf format and print a message at fatal level, close the logs and call os.Exit(code).
func (*Log) GetCallerSkip ¶ added in v1.0.27
GetCallerSkip return the logger's caller skip
func (*Log) GetLoggerLevel ¶ added in v1.0.27
GetLoggerLevel get the named logger level
func (*Log) GetOutputer ¶
Outputer return a io.Writer for go log.SetOutput callerSkip: default is 1 (means +1) if the outputer is used by go std log, set callerSkip to 2 example:
import (
golog "log"
"github.com/askasoft/pango/log"
)
golog.SetOutput(log.Outputer("GO", log.LevelInfo, 3))
func (*Log) GetTraceLevel ¶
GetTraceLevel return the logger's trace level
func (*Log) IsDebugEnabled ¶
IsDebugEnabled is DEBUG level enabled
func (*Log) IsErrorEnabled ¶
IsErrorEnabled is ERROR level enabled
func (*Log) IsFatalEnabled ¶
IsFatalEnabled is FATAL level enabled
func (*Log) IsInfoEnabled ¶
IsInfoEnabled is INFO level enabled
func (*Log) IsLevelEnabled ¶
IsLevelEnabled is specified level enabled
func (*Log) IsTraceEnabled ¶
IsTraceEnabled is TRACE level enabled
func (*Log) IsWarnEnabled ¶
IsWarnEnabled is WARN level enabled
func (*Log) SetCallerSkip ¶ added in v1.0.27
SetCallerSkip set the logger's caller skip (!!SLOW!!), 0: disable runtime.Caller()
func (*Log) SetTraceLevel ¶
SetTraceLevel set the logger's trace level
func (*Log) SwitchWriter ¶
SwitchWriter use lw to replace the log writer
type Logger ¶
type Logger interface {
// GetLogger create a new logger with name
GetLogger(name string) Logger
// Outputer return a io.Writer for go log.SetOutput
// callerSkip: default is 1 (means +1)
// if the outputer is used by go std log, set callerSkip to 2
// example:
//
// import (
// golog "log"
// "github.com/askasoft/pango/log"
// )
// golog.SetOutput(log.Outputer("GO", log.LevelInfo, 3))
GetOutputer(name string, lvl Level, callerSkip ...int) Outputer
// GetName return the logger's name
GetName() string
// GetLevel return the logger's level
GetLevel() Level
// GetTraceLevel return the logger's trace level
GetTraceLevel() Level
// GetCallerSkip return the logger's caller skip
GetCallerSkip() int
// SetCallerSkip set the logger's caller skip (!!SLOW!!), 0: disable runtime.Caller()
SetCallerSkip(n int)
// GetProp get logger property
GetProp(k string) any
// SetProp set logger property
SetProp(k string, v any)
// GetProps get logger properties
GetProps() map[string]any
// SetProps set logger properties
SetProps(map[string]any)
// IsLevelEnabled is specified level enabled
IsLevelEnabled(lvl Level) bool
// IsFatalEnabled is FATAL level enabled
IsFatalEnabled() bool
// Fatal print a fatal message, close the logs and call [os.Exit](code)
Fatal(code int, v ...any)
// Fatalf format and print a fatal message, close the logs and call [os.Exit](code)
Fatalf(code int, f string, v ...any)
// IsErrorEnabled is ERROR level enabled
IsErrorEnabled() bool
// Error print a message at error level.
Error(v ...any)
// Errorf format and print a message at error level.
Errorf(f string, v ...any)
// IsWarnEnabled is WARN level enabled
IsWarnEnabled() bool
// Warn print a message at warning level.
Warn(v ...any)
// Warnf format and print a message at warning level.
Warnf(f string, v ...any)
// IsInfoEnabled is INFO level enabled
IsInfoEnabled() bool
// Info print a message at info level.
Info(v ...any)
// Infof format and print a message at info level.
Infof(f string, v ...any)
// IsDebugEnabled is DEBUG level enabled
IsDebugEnabled() bool
// Debug print a message at debug level.
Debug(v ...any)
// Debugf format and print a message at debug level.
Debugf(f string, v ...any)
// IsTraceEnabled is TRACE level enabled
IsTraceEnabled() bool
// Trace print a message at trace level.
Trace(v ...any)
// Tracef format and print a message at trace level.
Tracef(f string, v ...any)
// Log print a message at specified level.
Log(lvl Level, v ...any)
// Logf format and print a message at specified level.
Logf(lvl Level, f string, v ...any)
// Write write a log event
Write(le *Event)
}
Logger logger interface
type MultiWriter ¶
type MultiWriter struct {
Writers []Writer
}
MultiWriter write log to multiple writers.
func NewMultiWriter ¶
func NewMultiWriter(ws ...Writer) *MultiWriter
NewMultiWriter create a multi writer
func (*MultiWriter) Write ¶
func (mw *MultiWriter) Write(le *Event)
Write write log event to multiple writers.
type NameFilter ¶
type NameFilter struct {
Name string
}
NameFilter logger name filter
func (*NameFilter) Reject ¶
func (nf *NameFilter) Reject(le *Event) bool
Reject filter event by logger name
type NameNotFilter ¶
type NameNotFilter struct {
Name string
}
NameNotFilter logger name filter
func (*NameNotFilter) Reject ¶
func (nnf *NameNotFilter) Reject(le *Event) bool
Reject filter event by logger name
type OrFilter ¶ added in v1.0.27
type OrFilter struct {
Filters []Filter
}
OrFilter a OR multiple filter
func NewOrFilter ¶ added in v1.0.27
NewOrFilter create a OR multiple filter
type Outputer ¶
Outputer interface for io.Writer
func GetOutputer ¶
GetOutputer return a io.Writer for go log.SetOutput callerSkip: default is 1 (means +1) if the outputer is used by go std log, set callerSkip to 2 example:
import (
golog "log"
"github.com/askasoft/pango/log"
)
golog.SetOutput(log.Outputer("GO", log.LevelInfo, 2))
type RetrySupport ¶ added in v1.0.27
type RetrySupport struct {
Retries int
RetryBuffer EventBuffer
}
RetrySupport cache event if write failed, and retry write when the next log event come.
func (*RetrySupport) RetryFlush ¶ added in v1.0.27
func (rs *RetrySupport) RetryFlush(write func(*Event) error)
func (*RetrySupport) RetryWrite ¶ added in v1.0.27
func (rs *RetrySupport) RetryWrite(le *Event, write func(*Event) error)
type StreamWriter ¶
type StreamWriter struct {
FilterSupport
FormatSupport
Color bool // this field is useful only when system's terminal supports color.
Output io.Writer // output writer. if nil, use os.Stdout as default or os.Stderr at Error level.
}
StreamWriter implements log Writer Interface and writes messages to terminal.
func NewConsoleWriter ¶
func NewConsoleWriter() *StreamWriter
NewConsoleWriter create a color console log writer
func NewStdoutWriter ¶
func NewStdoutWriter() *StreamWriter
NewStdoutWriter create a stdout log writer
func (*StreamWriter) Write ¶
func (sw *StreamWriter) Write(le *Event)
Write write message to output writer. If Output is nil, use os.Stdout as default or os.Stderr at Error level.
type SubjectSuport ¶ added in v1.0.27
type SubjectSuport struct {
Subjecter Formatter // log formatter
SubBuffer bytes.Buffer // log buffer
}
func (*SubjectSuport) SetSubject ¶ added in v1.0.27
func (ss *SubjectSuport) SetSubject(format string)
SetSubject set the subject formatter
func (*SubjectSuport) SubFormat ¶ added in v1.0.27
func (ss *SubjectSuport) SubFormat(le *Event) []byte
GetFormatter get Formatter
type SyncWriter ¶
type SyncWriter struct {
// contains filtered or unexported fields
}
SyncWriter synchronized log writer
func NewSyncWriter ¶
func NewSyncWriter(w Writer) *SyncWriter
NewSyncWriter create a synchronized writer
func (*SyncWriter) Close ¶
func (sw *SyncWriter) Close()
Close synchronize close the underlying writer
func (*SyncWriter) Flush ¶
func (sw *SyncWriter) Flush()
Flush synchronize flush the underlying writer
func (*SyncWriter) SetWriter ¶
func (sw *SyncWriter) SetWriter(w Writer)
SetWriter synchronize close the old log writer then set the new log writer
type TextFormatter ¶
type TextFormatter struct {
// contains filtered or unexported fields
}
TextFormatter text formatter
func NewTextFormatter ¶
func NewTextFormatter(format string) *TextFormatter
NewTextFormatter create a Text Formatter instance Text Format %t{format}: time, if {format} is omitted, '2006-01-02T15:04:05.000Z07:00' will be used %c{format}: logger name %p{format}: log level prefix %l{format}: log level string %h{format}: hostname %e{key}: os environment variable %x{key}: logger property %X{=| }: logger properties (operator|separator) %S: caller source file name %L: caller source line number %F: caller function name %T: caller stack trace %m: message %q: quoted message %n: EOL(Windows: "\r\n", Other: "\n")
func (*TextFormatter) SetFormat ¶ added in v1.0.12
func (tf *TextFormatter) SetFormat(format string)
SetFormat initialize the text formatter