log

package
v1.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2023 License: MIT Imports: 29 Imported by: 12

README

Pango Log

A Go Log library like Log4j. It can use many log writers. This package is inspired by https://github.com/pandafw/panda/tree/master/panda-core/src/main/java/panda/log .

How to install?
go get github.com/askasoft/pango
What writers are supported?

As of now this log support stream(console), file, smtp, connection(tcp), webhook(slack, teams).

How to use it?

First you must import it

import (
	"github.com/askasoft/pango/log"
)

Then init a Log (example with console writer)

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.StreamWriter{Color:true}))

Use it like this:

	log.Trace("trace")
	log.Debug("debug")
	log.Info("info")
	log.Warn("warning")
	log.Fatal("fatal")
File writer

Configure file writer like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.FileWriter{Path:"test.log"}))
Conn writer

Configure like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.ConnWriter{Net:"tcp",Addr:":7020"}))
	log.Info("info")
Slack writer

Configure like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.SlackWriter{
		Webhook: "https://hooks.slack.com/services/...",
		Channel: "alert",
		Username: "gotest",
	}))
	log.Error("error")
SMTP writer

Configure like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.SMTPWriter{
		Host: "smtp.gmail.com",
		Port: 587,
		Username: "pangotest@gmail.com",
		Password: "xxxxxxxx",
		From: "xxxx@gmail.com",
		Tos: []string{"someone@gmail.com"},
	}))
	log.Fatal("oh my god!")
Teams writer

Configure like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.TeamsWriter{
		Webhook: "https://xxx.webhook.office.com/webhookb2/...",
	}))
	log.Error("error")
Webhook writer

Configure like this:

	log := log.NewLog()
	log.SetWriter(log.NewSyncWriter(&log.WebhookWriter{
		Webhook: "http://localhost:9200/pango/logs",
		ContentType: "application/json",
		Timeout: time.Second*5,
	}))
	log.Fatal("fatal error!")
Multiple writer

Configure like this:

	log := log.NewLog()
	fw := &log.FileWriter{Path:"test.log"}
	ww := &log.WebhookWriter{
		Webhook: "http://localhost:9200/pango/logs",
		ContentType: "application/json",
		Timeout: time.Second*5,
	}
	log.SetWriter(log.NewSyncWriter(log.NewMultiWriter(fw, ww)))
	log.Fatal("fatal error!")
Async writer

Configure like this:

	log := log.NewLog()
	ww := &log.WebhookWriter{
		Webhook: "http://localhost:9200/pango/logs",
		ContentType: "application/json",
		Timeout: time.Second*5,
	}
	log.SetWriter(log.NewAsyncWriter(ww, 1000))
	log.Fatal("fatal error!")
Configure from ini file
	log := log.NewLog()
	log.Config("log.ini")
log.ini
# log configuration #

### log async ###
# > 0 : do asynchronize wrap 
# < 0 : do synchronize wrap
# = 0 : do nothing (default)
async = 1000

### global log format ###
#format=json:{"level":%l, "file":%S, "func":%F, "msg": %m}%n
format=text:%l %S %F() - %m%n%T

### log writer ###
writer = stdout, stderr, tcp, dailyfile, slack, smtp, webhook

### log level ###
[level]
* = info
sql = debug
http = trace

### stdout writer ###
[writer.stdout]
format = %l - %m%n%T
filter = name:out level:debug

### tcp writer ###
[writer.tcp]
_async = 1000
addr = localhost:9999
timeout = 5s
format = %l - %m%n%T
filter = level:error

### file writer ###
[writer.dailyfile]
_ = file
path = /tmp/gotest/logs/test.log
dirPerm = 0777
maxDays = 7
format = %l %S:%L %F() - %m%n%T
filter = level:error

### slack writer ###
[writer.slack]
_async = 1000
subject = %l - %m 
channel = develop
username = gotest
webhook = https://hooks.slack.com/services/...
timeout = 5s
format = %l - %m%n%T
filter = level:error

### smtp writer ###
[writer.smtp]
_async = 1000
host = localhost
port = 25
username = -----
password = xxxxxxx
from = pango@google.com
to = to1@test.com, to2@test.com
cc = cc1@test.com, cc2@test.com
timeout = 5s
subject = %l - %m 
format = %l - %m%n%T
filter = level:error

### teams writer ###
[writer.teams]
_async = 1000
webhook = https://xxx.webhook.office.com/webhookb2/...
timeout = 5s
format = %l - %m%n%T
filter = level:error

### webhook writer ###
[writer.webhook]
_async = 1000
webhook = http://localhost:9200/pango/logs
contentType = application/json
timeout = 5s
format = json:{"when":%t{2006-01-02T15:04:05.000Z07:00}, "level":%l, "file":%S, "line":%L, "func":%F, "msg": %m, "stack": %T}%n
filter = level:error

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

Constants

This section is empty.

Variables

View Source
var EOL = iox.EOL

EOL windows: "\r\n" other: "\n"

View Source
var JSONFmtDefault = newJSONFormatter(`{"when": %t, "level": %l, "name": %c, "file": %S, "line": %L, "func": %F, "msg": %m, "trace": %T}%n`)

JSONFmtDefault default log format `{"when": %t, "level": %l, "name": %c, "file": %S, "line": %L, "func": %F, "msg": %m, "trace": %T}%n`

View Source
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"

View Source
var TextFmtSimple = newTextFormatter("[%p] %m%n")

TextFmtSimple simple log format "[%p] %m%n"

View Source
var TextFmtSubject = newTextFormatter("[%l] %m")

TextFmtSubject subject log format "[%l] %m"

Functions

func Close

func Close()

Close will remove all writers and stop async goroutine

func Config

func Config(filename string) error

Config config log by configuration file

func ConfigWriter

func ConfigWriter(w Writer, c map[string]any) error

ConfigWriter config the writer by the configuration map 'c'

func Debug

func Debug(v ...any)

Debug log a message at debug level.

func Debugf

func Debugf(f string, v ...any)

Debugf format log a message at debug level.

func Error

func Error(v ...any)

Error log a message at error level.

func Errorf

func Errorf(f string, v ...any)

Errorf format and log a message at error level.

func Fatal

func Fatal(v ...any)

Fatal log a message at fatal level.

func Fatalf

func Fatalf(f string, v ...any)

Fatalf format and log a message at fatal level.

func GetCallerDepth

func GetCallerDepth() int

GetCallerDepth return the logger's caller depth

func GetProp

func GetProp(k string) any

GetProp get logger property

func GetProps

func GetProps() map[string]any

GetProps get logger properties

func Info

func Info(v ...any)

Info log a message at info level.

func Infof

func Infof(f string, v ...any)

Infof format and log a message at info level.

func IsDebugEnabled

func IsDebugEnabled() bool

IsDebugEnabled is DEBUG level enabled

func IsErrorEnabled

func IsErrorEnabled() bool

IsErrorEnabled is ERROR level enabled

func IsFatalEnabled

func IsFatalEnabled() bool

IsFatalEnabled is FATAL level enabled

func IsInfoEnabled

func IsInfoEnabled() bool

IsInfoEnabled is INFO level enabled

func IsTraceEnabled

func IsTraceEnabled() bool

IsTraceEnabled is TRACE level enabled

func IsWarnEnabled

func IsWarnEnabled() bool

IsWarnEnabled is WARN level enabled

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 SetCallerDepth

func SetCallerDepth(d int)

SetCallerDepth set the logger's caller depth (!!SLOW!!), 0: disable runtime.Caller()

func SetFormatter

func SetFormatter(lf Formatter)

SetFormatter set the formatter.

func SetLevel

func SetLevel(lvl Level)

SetLevel set the logger's level

func SetLevels

func SetLevels(lvls map[string]Level)

SetLevels set the logger levels

func SetProp

func SetProp(k string, v any)

SetProp set logger property

func SetProps

func SetProps(props map[string]any)

SetProps set logger properties

func SetWriter

func SetWriter(lw Writer)

SetWriter set the writer.

func Trace

func Trace(v ...any)

Trace log a message at trace level.

func Tracef

func Tracef(f string, v ...any)

Tracef format and log a message at trace level.

func Warn

func Warn(v ...any)

Warn log a message at warning level.

func Warnf

func Warnf(f string, v ...any)

Warnf format and log a message at warning level.

Types

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) Flush

func (aw *AsyncWriter) Flush()

Flush async flush the underlying writer

func (*AsyncWriter) SetWriter

func (aw *AsyncWriter) SetWriter(w Writer)

SetWriter close the old writer and set the new writer

func (*AsyncWriter) Start

func (aw *AsyncWriter) Start(size int)

Start start the goroutine

func (*AsyncWriter) Stop

func (aw *AsyncWriter) Stop()

Stop stop the run() go-routine

func (*AsyncWriter) StopAfter

func (aw *AsyncWriter) StopAfter(d time.Duration)

StopAfter auto stop the run() go-routine when the evtChan is empty and after duration d.

func (*AsyncWriter) Write

func (aw *AsyncWriter) Write(le *Event) error

Write async write the log event

type ConnWriter

type ConnWriter struct {
	Net     string
	Addr    string
	Timeout time.Duration
	Logfmt  Formatter // log formatter
	Logfil  Filter    // log filter
	// contains filtered or unexported fields
}

ConnWriter implements Writer. it writes messages in keep-live tcp connection.

func (*ConnWriter) Close

func (cw *ConnWriter) Close()

Close close the file description, close file writer.

func (*ConnWriter) Flush

func (cw *ConnWriter) Flush()

Flush implementing method. empty.

func (*ConnWriter) SetFilter

func (cw *ConnWriter) SetFilter(filter string)

SetFilter set the log filter

func (*ConnWriter) SetFormat

func (cw *ConnWriter) SetFormat(format string)

SetFormat set the log formatter

func (*ConnWriter) SetTimeout

func (cw *ConnWriter) SetTimeout(timeout string) error

SetTimeout set timeout

func (*ConnWriter) Write

func (cw *ConnWriter) Write(le *Event) (err error)

Write write logger message to connection.

type Event

type Event struct {
	// contains filtered or unexported fields
}

Event log event

func (*Event) File

func (le *Event) File() string

File returns log event's file

func (*Event) Func

func (le *Event) Func() string

Func returns log event's function

func (*Event) Level

func (le *Event) Level() Level

Level returns log event's level

func (*Event) Line

func (le *Event) Line() int

Line returns log event's line

func (*Event) Logger

func (le *Event) Logger() Logger

Logger returns log event's Logger

func (*Event) Msg

func (le *Event) Msg() string

Msg returns log event's message

func (*Event) Trace

func (le *Event) Trace() string

Trace returns log event's stack trace

func (*Event) When

func (le *Event) When() time.Time

When returns log event's time

type EventBuffer

type EventBuffer struct {
	BufSize int
	// contains filtered or unexported fields
}

EventBuffer a event buffer

func (*EventBuffer) Len

func (eb *EventBuffer) Len() int

Len returns the number of elements currently stored in the buffer.

func (*EventBuffer) Peek

func (eb *EventBuffer) Peek() *Event

Peek peek event from the buffer

func (*EventBuffer) Poll

func (eb *EventBuffer) Poll() *Event

Poll poll event from the buffer

func (*EventBuffer) Push

func (eb *EventBuffer) Push(le *Event)

Push push event to the buffer

type FailoverWriter

type FailoverWriter struct {
	// contains filtered or unexported fields
}

FailoverWriter implements log Writer Interface and send log message to webhook.

func NewFailoverWriter

func NewFailoverWriter(w Writer, bufSize int) *FailoverWriter

NewFailoverWriter create a failover writer

func (*FailoverWriter) Close

func (fw *FailoverWriter) Close()

Close implementing method. empty.

func (*FailoverWriter) Flush

func (fw *FailoverWriter) Flush()

Flush implementing method. empty.

func (*FailoverWriter) Write

func (fw *FailoverWriter) Write(le *Event) error

Write write event to underlying writer

type FileWriter

type FileWriter struct {
	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
	Logfmt    Formatter // log formatter
	Logfil    Filter    // log filter
	// 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) SetFilter

func (fw *FileWriter) SetFilter(filter string)

SetFilter set the log filter

func (*FileWriter) SetFormat

func (fw *FileWriter) SetFormat(format string)

SetFormat set the log formatter

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) error

Write write logger message into file.

type Filter

type Filter interface {
	Reject(le *Event) bool
}

Filter log filter

func CreateFilter

func CreateFilter(name string, conf string) Filter

CreateFilter create a log filter by name and config

func NewLogFilter

func NewLogFilter(c string) Filter

NewLogFilter create a log filter by the configuration string 'c'

func NewNameNotFilter

func NewNameNotFilter(name string) Filter

NewNameNotFilter create a name filter (not equal)

type FilterCreator

type FilterCreator func(s string) Filter

FilterCreator filter create function

type Formatter

type Formatter interface {
	Write(w io.Writer, le *Event)
}

Formatter log formater interface

func GetFormatter

func GetFormatter() Formatter

GetFormatter get the formatter

func NewLogFormatter

func NewLogFormatter(format string) Formatter

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.000' will be used %c{format}: logger name %p{format}: log level prefix %l{format}: log level string %x{key}: logger property %X: logger properties (json format) %S: caller source file name (!!SLOW!!) %L: caller source line number (!!SLOW!!) %F: caller function name (!!SLOW!!) %T: caller stack trace (!!SLOW!!) %m: message %n: EOL(Windows: "\r\n", Other: "\n")

func (*JSONFormatter) Init

func (jf *JSONFormatter) Init(format string)

Init initialize the json formatter

func (*JSONFormatter) Write

func (jf *JSONFormatter) Write(w io.Writer, le *Event)

Write format the log event as a json string to the writer w

type Level

type Level uint32

Level log level

const (
	LevelNone Level = iota
	LevelFatal
	LevelError
	LevelWarn
	LevelInfo
	LevelDebug
	LevelTrace
)

Log level

func GetLevel

func GetLevel() Level

GetLevel return the logger's level

func ParseLevel

func ParseLevel(lvl string) Level

ParseLevel parse level from string

func (Level) Prefix

func (l Level) Prefix() string

Prefix return level prefix

func (Level) String

func (l Level) String() string

String return level string

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 NewLog

func NewLog() *Log

NewLog returns a new Log.

func (*Log) Close

func (log *Log) Close()

Close close logger, flush all data and close the writer.

func (*Log) Config

func (log *Log) Config(filename string) error

Config config log by configuration file

func (*Log) Debug

func (log *Log) Debug(v ...any)

Debug log a message at debug level.

func (*Log) Debugf

func (log *Log) Debugf(f string, v ...any)

Debugf format log a message at debug level.

func (*Log) Error

func (log *Log) Error(v ...any)

Error log a message at error level.

func (*Log) Errorf

func (log *Log) Errorf(f string, v ...any)

Errorf format and log a message at error level.

func (*Log) Fatal

func (log *Log) Fatal(v ...any)

Fatal log a message at fatal level.

func (*Log) Fatalf

func (log *Log) Fatalf(f string, v ...any)

Fatalf format and log a message at fatal level.

func (*Log) Flush

func (log *Log) Flush()

Flush flush all chan data.

func (*Log) GetCallerDepth

func (log *Log) GetCallerDepth() int

GetCallerDepth return the logger's depth

func (*Log) GetFormatter

func (log *Log) GetFormatter() Formatter

GetFormatter get logger formatter

func (*Log) GetLevel

func (log *Log) GetLevel() Level

GetLevel return the logger's level

func (*Log) GetLogger

func (log *Log) GetLogger(name string) Logger

GetLogger returns a new Logger with name

func (*Log) GetName

func (log *Log) GetName() string

GetName return the logger's name

func (*Log) GetOutputer

func (log *Log) GetOutputer(name string, lvl Level, callerDepth ...int) Outputer

Outputer return a io.Writer for go log.SetOutput callerDepth: default is 1 (means +1) if the outputer is used by go std log, set callerDepth to 2 example:

import (
  golog "log"
  "github.com/askasoft/pango/log"
)
golog.SetOutput(log.Outputer("GO", log.LevelInfo, 3))

func (*Log) GetProp

func (log *Log) GetProp(k string) any

GetProp get logger property

func (*Log) GetProps

func (log *Log) GetProps() map[string]any

GetProps get logger properties

func (*Log) GetTraceLevel

func (log *Log) GetTraceLevel() Level

GetTraceLevel return the logger's trace level

func (*Log) GetWriter

func (log *Log) GetWriter() Writer

GetWriter get the log writer

func (*Log) Info

func (log *Log) Info(v ...any)

Info log a message at info level.

func (*Log) Infof

func (log *Log) Infof(f string, v ...any)

Infof format and log a message at info level.

func (*Log) IsDebugEnabled

func (log *Log) IsDebugEnabled() bool

IsDebugEnabled is DEBUG level enabled

func (*Log) IsErrorEnabled

func (log *Log) IsErrorEnabled() bool

IsErrorEnabled is ERROR level enabled

func (*Log) IsFatalEnabled

func (log *Log) IsFatalEnabled() bool

IsFatalEnabled is FATAL level enabled

func (*Log) IsInfoEnabled

func (log *Log) IsInfoEnabled() bool

IsInfoEnabled is INFO level enabled

func (*Log) IsLevelEnabled

func (log *Log) IsLevelEnabled(lvl Level) bool

IsLevelEnabled is specified level enabled

func (*Log) IsTraceEnabled

func (log *Log) IsTraceEnabled() bool

IsTraceEnabled is TRACE level enabled

func (*Log) IsWarnEnabled

func (log *Log) IsWarnEnabled() bool

IsWarnEnabled is WARN level enabled

func (*Log) Log

func (log *Log) Log(lvl Level, v ...any)

Log log a message at specified level.

func (*Log) Logf

func (log *Log) Logf(lvl Level, f string, v ...any)

Logf format and log a message at specified level.

func (*Log) SetCallerDepth

func (log *Log) SetCallerDepth(d int)

SetCallerDepth set the logger's caller depth (!!SLOW!!), 0: disable runtime.Caller()

func (*Log) SetFormatter

func (log *Log) SetFormatter(lf Formatter)

SetFormatter set logger formatter

func (*Log) SetLevel

func (log *Log) SetLevel(lvl Level)

SetLevel set the logger's level

func (*Log) SetLevels

func (log *Log) SetLevels(lvls map[string]Level)

SetLevels set the logger levels

func (*Log) SetName

func (log *Log) SetName(name string)

SetName set the logger's name

func (*Log) SetProp

func (log *Log) SetProp(k string, v any)

SetProp set logger property

func (*Log) SetProps

func (log *Log) SetProps(props map[string]any)

SetProps set logger properties

func (*Log) SetTraceLevel

func (log *Log) SetTraceLevel(lvl Level)

SetTraceLevel set the logger's trace level

func (*Log) SetWriter

func (log *Log) SetWriter(lw Writer)

SetWriter set the log writer

func (*Log) SwitchWriter

func (log *Log) SwitchWriter(lw Writer)

SwitchWriter use lw to replace the log writer

func (*Log) Trace

func (log *Log) Trace(v ...any)

Trace log a message at trace level.

func (*Log) Tracef

func (log *Log) Tracef(f string, v ...any)

Tracef format and log a message at trace level.

func (*Log) Warn

func (log *Log) Warn(v ...any)

Warn log a message at warning level.

func (*Log) Warnf

func (log *Log) Warnf(f string, v ...any)

Warnf format and log a message at warning level.

type Logger

type Logger interface {
	GetLogger(name string) Logger
	GetOutputer(name string, lvl Level, callerDepth ...int) Outputer
	GetName() string
	SetName(name string)
	GetLevel() Level
	GetTraceLevel() Level
	GetFormatter() Formatter
	GetCallerDepth() int
	SetCallerDepth(d int)
	GetProp(k string) any
	SetProp(k string, v any)
	GetProps() map[string]any
	SetProps(map[string]any)
	IsLevelEnabled(lvl Level) bool
	Log(lvl Level, v ...any)
	Logf(lvl Level, f string, v ...any)
	IsFatalEnabled() bool
	Fatal(v ...any)
	Fatalf(f string, v ...any)
	IsErrorEnabled() bool
	Error(v ...any)
	Errorf(f string, v ...any)
	IsWarnEnabled() bool
	Warn(v ...any)
	Warnf(f string, v ...any)
	IsInfoEnabled() bool
	Info(v ...any)
	Infof(f string, v ...any)
	IsDebugEnabled() bool
	Debug(v ...any)
	Debugf(f string, v ...any)
	IsTraceEnabled() bool
	Trace(v ...any)
	Tracef(f string, v ...any)
}

Logger logger interface

func GetLogger

func GetLogger(name string) Logger

GetLogger returns a new logger

type MultiFilter

type MultiFilter struct {
	Filters []Filter
}

MultiFilter a multiple filter

func NewMultiFilter

func NewMultiFilter(fs ...Filter) *MultiFilter

NewMultiFilter create a multiple filter

func (*MultiFilter) Reject

func (mf *MultiFilter) Reject(le *Event) bool

Reject filter event by multiple filters

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) Close

func (mw *MultiWriter) Close()

Close close multiple writers.

func (*MultiWriter) Flush

func (mw *MultiWriter) Flush()

Flush flush multiple writers.

func (*MultiWriter) Write

func (mw *MultiWriter) Write(le *Event) error

Write write log event to multiple writers.

type NameFilter

type NameFilter struct {
	Name string
}

NameFilter logger name filter

func NewNameFilter

func NewNameFilter(name string) *NameFilter

NewNameFilter create a 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 NopWriter

type NopWriter struct {
}

NopWriter implements Writer. Do nothing.

func (*NopWriter) Close

func (nw *NopWriter) Close()

Close do nothing.

func (*NopWriter) Flush

func (nw *NopWriter) Flush()

Flush do nothing.

func (*NopWriter) Write

func (nw *NopWriter) Write(le *Event) error

Write do nothing.

type Outputer

type Outputer interface {
	io.Writer
	Printf(format string, args ...any)
}

Outputer interface for io.Writer, gorm.logger.Writer

func GetOutputer

func GetOutputer(name string, lvl Level, callerDepth ...int) Outputer

GetOutputer return a io.Writer for go log.SetOutput callerDepth: default is 1 (means +1) if the outputer is used by go std log, set callerDepth to 2 example:

import (
  golog "log"
  "github.com/askasoft/pango/log"
)
golog.SetOutput(log.Outputer("GO", log.LevelInfo, 2))

type SMTPWriter

type SMTPWriter struct {
	Host     string
	Port     int
	Username string
	Password string
	From     string
	Tos      []string
	Ccs      []string
	Timeout  time.Duration
	Subfmt   Formatter // subject formatter
	Logfmt   Formatter // log formatter
	Logfil   Filter    // log filter
	// contains filtered or unexported fields
}

SMTPWriter implements log Writer Interface and send log message.

func (*SMTPWriter) Close

func (sw *SMTPWriter) Close()

Close close the mail sender

func (*SMTPWriter) Flush

func (sw *SMTPWriter) Flush()

Flush implementing method. empty.

func (*SMTPWriter) SetCc

func (sw *SMTPWriter) SetCc(s string)

SetCc set Cc recipients

func (*SMTPWriter) SetFilter

func (sw *SMTPWriter) SetFilter(filter string)

SetFilter set the log filter

func (*SMTPWriter) SetFormat

func (sw *SMTPWriter) SetFormat(format string)

SetFormat set the log formatter

func (*SMTPWriter) SetSubject

func (sw *SMTPWriter) SetSubject(format string)

SetSubject set the subject formatter

func (*SMTPWriter) SetTimeout

func (sw *SMTPWriter) SetTimeout(timeout string) error

SetTimeout set timeout

func (*SMTPWriter) SetTo

func (sw *SMTPWriter) SetTo(s string)

SetTo set To recipients

func (*SMTPWriter) Write

func (sw *SMTPWriter) Write(le *Event) (err error)

Write send log message to smtp server.

type SlackWriter

type SlackWriter struct {
	Webhook string
	Timeout time.Duration
	Subfmt  Formatter // subject formatter
	Logfmt  Formatter // log formatter
	Logfil  Filter    // log filter
	// contains filtered or unexported fields
}

SlackWriter implements log Writer Interface and send log message to slack.

func (*SlackWriter) Close

func (sw *SlackWriter) Close()

Close implementing method. empty.

func (*SlackWriter) Flush

func (sw *SlackWriter) Flush()

Flush implementing method. empty.

func (*SlackWriter) SetFilter

func (sw *SlackWriter) SetFilter(filter string)

SetFilter set the log filter

func (*SlackWriter) SetFormat

func (sw *SlackWriter) SetFormat(format string)

SetFormat set the log formatter

func (*SlackWriter) SetSubject

func (sw *SlackWriter) SetSubject(format string)

SetSubject set the subject formatter

func (*SlackWriter) SetTimeout

func (sw *SlackWriter) SetTimeout(timeout string) error

SetTimeout set timeout

func (*SlackWriter) SetWebhook

func (sw *SlackWriter) SetWebhook(webhook string) error

SetWebhook set the webhook URL

func (*SlackWriter) Write

func (sw *SlackWriter) Write(le *Event) (err error)

Write send log message to slack

type StreamWriter

type StreamWriter struct {
	Color  bool      //this filed is useful only when system's terminal supports color
	Output io.Writer // log output
	Logfmt Formatter // log formatter
	Logfil Filter    // log filter
	// contains filtered or unexported fields
}

StreamWriter implements log Writer Interface and writes messages to terminal.

func (*StreamWriter) Close

func (sw *StreamWriter) Close()

Close implementing method. empty.

func (*StreamWriter) Flush

func (sw *StreamWriter) Flush()

Flush implementing method. empty.

func (*StreamWriter) SetFilter

func (sw *StreamWriter) SetFilter(filter string)

SetFilter set the log filter

func (*StreamWriter) SetFormat

func (sw *StreamWriter) SetFormat(format string)

SetFormat set the log formatter

func (*StreamWriter) Write

func (sw *StreamWriter) Write(le *Event) (err error)

Write write message in console.

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

func (*SyncWriter) Write

func (sw *SyncWriter) Write(le *Event) error

Write synchronize write log event

type TeamsWriter

type TeamsWriter struct {
	Webhook string
	Timeout time.Duration
	Subfmt  Formatter // subject formatter
	Logfmt  Formatter // log formatter
	Logfil  Filter    // log filter
	// contains filtered or unexported fields
}

TeamsWriter implements log Writer Interface and send log message to teams.

func (*TeamsWriter) Close

func (tw *TeamsWriter) Close()

Close implementing method. empty.

func (*TeamsWriter) Flush

func (tw *TeamsWriter) Flush()

Flush implementing method. empty.

func (*TeamsWriter) SetBuffer

func (tw *TeamsWriter) SetBuffer(buffer string) error

SetBuffer set the event buffer size

func (*TeamsWriter) SetFilter

func (tw *TeamsWriter) SetFilter(filter string)

SetFilter set the log filter

func (*TeamsWriter) SetFormat

func (tw *TeamsWriter) SetFormat(format string)

SetFormat set the log formatter

func (*TeamsWriter) SetSubject

func (tw *TeamsWriter) SetSubject(format string)

SetSubject set the subject formatter

func (*TeamsWriter) SetTimeout

func (tw *TeamsWriter) SetTimeout(timeout string) error

SetTimeout set timeout

func (*TeamsWriter) SetWebhook

func (tw *TeamsWriter) SetWebhook(webhook string) error

SetWebhook set the webhook URL

func (*TeamsWriter) Write

func (tw *TeamsWriter) Write(le *Event) (err error)

Write send log message to teams

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.000' will be used %c{format}: logger name %p{format}: log level prefix %l{format}: log level string %x{key}: logger property %X{=| }: logger properties (operator|separator) %S: caller source file name (!!SLOW!!) %L: caller source line number (!!SLOW!!) %F: caller function name (!!SLOW!!) %T: caller stack trace (!!SLOW!!) %m: message %n: EOL(Windows: "\r\n", Other: "\n")

func (*TextFormatter) Init

func (tf *TextFormatter) Init(format string)

Init initialize the text formatter

func (*TextFormatter) Write

func (tf *TextFormatter) Write(w io.Writer, le *Event)

Format format the log event to the writer w

type WebhookWriter

type WebhookWriter struct {
	Webhook     string // webhook URL
	Method      string // http method
	ContentType string
	Timeout     time.Duration
	Logfmt      Formatter // log formatter
	Logfil      Filter    // log filter
	// contains filtered or unexported fields
}

WebhookWriter implements log Writer Interface and send log message to webhook.

func (*WebhookWriter) Close

func (ww *WebhookWriter) Close()

Close implementing method. empty.

func (*WebhookWriter) Flush

func (ww *WebhookWriter) Flush()

Flush implementing method. empty.

func (*WebhookWriter) SetFilter

func (ww *WebhookWriter) SetFilter(filter string)

SetFilter set the log filter

func (*WebhookWriter) SetFormat

func (ww *WebhookWriter) SetFormat(format string)

SetFormat set the log formatter

func (*WebhookWriter) SetTimeout

func (ww *WebhookWriter) SetTimeout(timeout string) error

SetTimeout set timeout

func (*WebhookWriter) SetWebhook

func (ww *WebhookWriter) SetWebhook(webhook string) error

SetWebhook set the webhook URL

func (*WebhookWriter) Write

func (ww *WebhookWriter) Write(le *Event) error

Write send log message to webhook

type Writer

type Writer interface {
	Write(le *Event) error
	Flush()
	Close()
}

Writer log writer interface

func CreateWriter

func CreateWriter(name string) Writer

CreateWriter create a writer by name

func GetWriter

func GetWriter() Writer

GetWriter get the writer

func NewConsoleWriter

func NewConsoleWriter() Writer

NewConsoleWriter create a color console log writer

func NewStderrWriter

func NewStderrWriter() Writer

NewStderrWriter create a stderr writer

func NewStdoutWriter

func NewStdoutWriter() Writer

NewStdoutWriter create a stdout log writer

type WriterCreator

type WriterCreator func() Writer

WriterCreator writer create function

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL