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