handler

package
v0.1.7 Latest Latest
Warning

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

Go to latest
Published: Jan 2, 2022 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package handler provide useful common log handlers. eg: file, console, multi_file, rotate_file, stream, syslog, email

Index

Examples

Constants

View Source
const (
	EveryDay rotateTime = iota
	EveryHour
	Every30Minutes
	Every15Minutes
	EveryMinute
	EverySecond // only use for tests
)

Variables

View Source
var (
	// DefaultMaxSize is the maximum size of a log file in bytes.
	DefaultMaxSize uint64 = 1024 * 1024 * 1800
	// DefaultFilePerm perm and flags for create log file
	DefaultFilePerm  = 0664
	DefaultFileFlags = os.O_CREATE | os.O_WRONLY | os.O_APPEND
)

Functions

func BufferWrapper

func BufferWrapper(handler slog.FormatterWriterHandler, buffSize int) *bufferWrapper

BufferWrapper new instance

func OpenFile

func OpenFile(filepath string, flag int, perm int) (*os.File, error)

OpenFile like os.OpenFile

func QuickOpenFile

func QuickOpenFile(filepath string) (*os.File, error)

QuickOpenFile like os.OpenFile

Types

type BufferedHandler

type BufferedHandler struct {
	LevelsWithFormatter
	// contains filtered or unexported fields
}

BufferedHandler definition

func NewBuffered

func NewBuffered(cWriter io.WriteCloser, bufSize int) *BufferedHandler

NewBuffered create new BufferedHandler

func NewBufferedHandler

func NewBufferedHandler(cWriter io.WriteCloser, bufSize int) *BufferedHandler

NewBufferedHandler create new BufferedHandler

func (*BufferedHandler) Close

func (h *BufferedHandler) Close() error

Close log records

func (*BufferedHandler) Flush

func (h *BufferedHandler) Flush() error

Flush all buffers

func (*BufferedHandler) Handle

func (h *BufferedHandler) Handle(record *slog.Record) error

Handle log record

func (*BufferedHandler) Lock

func (lw *BufferedHandler) Lock()

Lock it

func (*BufferedHandler) LockEnabled

func (lw *BufferedHandler) LockEnabled() bool

LockEnabled status

func (*BufferedHandler) Unlock

func (lw *BufferedHandler) Unlock()

Unlock it

func (*BufferedHandler) UseLock

func (lw *BufferedHandler) UseLock(enable bool)

UseLock locker

type ConsoleHandler

type ConsoleHandler struct {
	IOWriterHandler
}

ConsoleHandler definition

func NewConsole

func NewConsole(levels []slog.Level) *ConsoleHandler

NewConsole create new ConsoleHandler

func NewConsoleHandler

func NewConsoleHandler(levels []slog.Level) *ConsoleHandler

NewConsoleHandler create new ConsoleHandler

func (*ConsoleHandler) Lock

func (lw *ConsoleHandler) Lock()

Lock it

func (*ConsoleHandler) LockEnabled

func (lw *ConsoleHandler) LockEnabled() bool

LockEnabled status

func (*ConsoleHandler) TextFormatter

func (h *ConsoleHandler) TextFormatter() *slog.TextFormatter

TextFormatter get the formatter

func (*ConsoleHandler) Unlock

func (lw *ConsoleHandler) Unlock()

Unlock it

func (*ConsoleHandler) UseLock

func (lw *ConsoleHandler) UseLock(enable bool)

UseLock locker

type EmailHandler

type EmailHandler struct {
	// NopFlushClose provide empty Flush(), Close() methods
	NopFlushClose
	// LevelWithFormatter support level and formatter
	LevelWithFormatter
	// From the sender email information
	From EmailOption
	// ToAddresses list
	ToAddresses []string
}

EmailHandler struct

func NewEmailHandler

func NewEmailHandler(from EmailOption, toAddresses []string) *EmailHandler

NewEmailHandler instance

func (*EmailHandler) Handle

func (h *EmailHandler) Handle(r *slog.Record) error

Handle an log record

type EmailOption

type EmailOption struct {
	SmtpHost string // eg "smtp.gmail.com"
	SmtpPort string // eg "587"
	FromAddr string // eg "yourEmail@gmail.com"
	Password string
}

EmailOption struct

type FileHandler

type FileHandler struct {

	// LevelsWithFormatter support limit log levels and formatter
	LevelsWithFormatter

	// NoBuffer on write log records
	NoBuffer bool
	// BuffSize for enable buffer
	BuffSize int
	// contains filtered or unexported fields
}

FileHandler definition

Example
package main

import (
	"github.com/tomorrowsky/slog"
	"github.com/tomorrowsky/slog/handler"
)

func main() {
	h1 := handler.MustFileHandler("/tmp/error.log", true)
	h1.Levels = slog.Levels{slog.PanicLevel, slog.ErrorLevel, slog.WarnLevel}

	h2 := handler.MustFileHandler("/tmp/info.log", true)
	h1.Levels = slog.Levels{slog.InfoLevel, slog.NoticeLevel, slog.DebugLevel, slog.TraceLevel}

	slog.PushHandler(h1)
	slog.PushHandler(h2)

	// add logs
	slog.Info("info message")
	slog.Error("error message")
}
Output:

func JSONFileHandler

func JSONFileHandler(logfile string) (*FileHandler, error)

JSONFileHandler create new FileHandler with JSON formatter

func MustFileHandler

func MustFileHandler(logfile string, useJSON bool) *FileHandler

MustFileHandler create file handler

func NewFileHandler

func NewFileHandler(logfile string, useJSON bool) (*FileHandler, error)

NewFileHandler create new FileHandler

func (*FileHandler) Close

func (h *FileHandler) Close() error

Close handler, will be flush logs to file, then close file

func (*FileHandler) Configure

func (h *FileHandler) Configure(fn func(h *FileHandler)) *FileHandler

Configure the handler

func (*FileHandler) Flush

func (h *FileHandler) Flush() error

Flush logs to disk file

func (*FileHandler) Handle

func (h *FileHandler) Handle(r *slog.Record) (err error)

Handle the log record

func (*FileHandler) Lock

func (lw *FileHandler) Lock()

Lock it

func (*FileHandler) LockEnabled

func (lw *FileHandler) LockEnabled() bool

LockEnabled status

func (*FileHandler) ReopenFile

func (h *FileHandler) ReopenFile() error

ReopenFile the log file

func (*FileHandler) Unlock

func (lw *FileHandler) Unlock()

Unlock it

func (*FileHandler) UseLock

func (lw *FileHandler) UseLock(enable bool)

UseLock locker

func (*FileHandler) Writer

func (h *FileHandler) Writer() io.Writer

Writer return *os.File

type GroupedHandler

type GroupedHandler struct {

	// Levels for log message
	Levels []slog.Level
	// IgnoreErr on handling messages
	IgnoreErr bool
	// contains filtered or unexported fields
}

GroupedHandler definition

func NewGroupedHandler

func NewGroupedHandler(handlers []slog.Handler) *GroupedHandler

NewGroupedHandler create new GroupedHandler

func (*GroupedHandler) Close

func (h *GroupedHandler) Close() error

Close log handlers

func (*GroupedHandler) Flush

func (h *GroupedHandler) Flush() error

Flush log records

func (*GroupedHandler) Handle

func (h *GroupedHandler) Handle(record *slog.Record) (err error)

Handle log record

func (*GroupedHandler) IsHandling

func (h *GroupedHandler) IsHandling(level slog.Level) bool

IsHandling Check if the current level can be handling

type IOWriterHandler

type IOWriterHandler struct {
	LevelsWithFormatter

	// Output io.WriteCloser
	Output io.Writer
	// contains filtered or unexported fields
}

IOWriterHandler definition

func NewIOWriter

func NewIOWriter(out io.Writer, levels []slog.Level) *IOWriterHandler

NewIOWriter create an new instance

func NewIOWriterHandler

func NewIOWriterHandler(out io.Writer, levels []slog.Level) *IOWriterHandler

NewIOWriterHandler create new IOWriterHandler Usage:

buf := new(bytes.Buffer)
h := handler.NewIOWriterHandler(&buf, slog.AllLevels)

f, err := os.OpenFile("my.log", ...)
h := handler.NewIOWriterHandler(f, slog.AllLevels)

func (*IOWriterHandler) Close

func (h *IOWriterHandler) Close() error

Close the handler

func (*IOWriterHandler) Flush

func (h *IOWriterHandler) Flush() error

Flush the handler

func (*IOWriterHandler) Handle

func (h *IOWriterHandler) Handle(record *slog.Record) error

Handle log record

func (*IOWriterHandler) Lock

func (lw *IOWriterHandler) Lock()

Lock it

func (*IOWriterHandler) LockEnabled

func (lw *IOWriterHandler) LockEnabled() bool

LockEnabled status

func (*IOWriterHandler) Unlock

func (lw *IOWriterHandler) Unlock()

Unlock it

func (*IOWriterHandler) UseLock

func (lw *IOWriterHandler) UseLock(enable bool)

UseLock locker

type LevelWithFormatter

type LevelWithFormatter struct {
	slog.Formattable
	// Level for log message. if current level <= Level will log message
	Level slog.Level
}

LevelWithFormatter struct definition

- support set log formatter - only support set one log level

func (*LevelWithFormatter) IsHandling

func (h *LevelWithFormatter) IsHandling(level slog.Level) bool

IsHandling Check if the current level can be handling

type LevelsWithFormatter

type LevelsWithFormatter struct {
	slog.Formattable
	// Levels for log message
	Levels []slog.Level
}

LevelsWithFormatter struct definition

- support set log formatter - support setting multi log levels

func (*LevelsWithFormatter) IsHandling

func (h *LevelsWithFormatter) IsHandling(level slog.Level) bool

IsHandling Check if the current level can be handling

type MultiFileHandler

type MultiFileHandler struct {

	// FileDir for save log files
	FileDir string
	// Files can use multi file for record level logs. eg:
	//  "error.log": []slog.Level{slog.Warn, slog.Error},
	//  "info.log": []slog.Level{slog.Trace, slog.Info, slog.Notice}
	// FileLevels map[string][]slog.Level
	FileLevels map[string]slog.Levels
	// NoBuffer on write log records
	NoBuffer bool
	// BuffSize for enable buffer
	BuffSize int
	// file contents max size
	MaxSize uint64
	// contains filtered or unexported fields
}

MultiFileHandler definition

func NewMultiFileHandler

func NewMultiFileHandler() *MultiFileHandler

NewMultiFileHandler instance

func (*MultiFileHandler) Close

func (h *MultiFileHandler) Close() error

func (*MultiFileHandler) Flush

func (h *MultiFileHandler) Flush() error

func (*MultiFileHandler) Handle

func (h *MultiFileHandler) Handle(record *slog.Record) error

func (*MultiFileHandler) IsHandling

func (h *MultiFileHandler) IsHandling(level slog.Level) bool

IsHandling Check if the current level can be handling

func (*MultiFileHandler) Lock

func (lw *MultiFileHandler) Lock()

Lock it

func (*MultiFileHandler) LockEnabled

func (lw *MultiFileHandler) LockEnabled() bool

LockEnabled status

func (*MultiFileHandler) Unlock

func (lw *MultiFileHandler) Unlock()

Unlock it

func (*MultiFileHandler) UseLock

func (lw *MultiFileHandler) UseLock(enable bool)

UseLock locker

type NopFlushClose

type NopFlushClose struct{}

NopFlushClose no operation. provide empty Flush(), Close() methods

func (*NopFlushClose) Close

func (h *NopFlushClose) Close() error

Close handler

func (*NopFlushClose) Flush

func (h *NopFlushClose) Flush() error

Flush logs to disk

type RotateFileHandler

type RotateFileHandler struct {

	// LevelsWithFormatter support limit log levels and formatter
	LevelsWithFormatter

	// for clear log files
	MaxFileCount int // The number of files should be kept
	MaxKeepTime  int // Time to wait until old logs are purged.

	// file contents max size
	MaxSize uint64
	// RenameFunc build filename for rotate file
	RenameFunc func(fpath string, rotateNum uint) string
	// contains filtered or unexported fields
}

RotateFileHandler struct definition It also supports splitting log files by time and size

func MustRotateFile

func MustRotateFile(logfile string, rt rotateTime) *RotateFileHandler

MustRotateFile instance

func NewRotateFile

func NewRotateFile(logfile string, rt rotateTime) (*RotateFileHandler, error)

NewRotateFile instance

func NewRotateFileHandler

func NewRotateFileHandler(logfile string, rt rotateTime) (*RotateFileHandler, error)

NewRotateFileHandler instance

func (*RotateFileHandler) Close

func (h *RotateFileHandler) Close() error

Close handler, will be flush logs to file, then close file

func (*RotateFileHandler) CloseBuffer

func (h *RotateFileHandler) CloseBuffer()

CloseBuffer for write logs

func (*RotateFileHandler) Flush

func (h *RotateFileHandler) Flush() error

Flush logs to disk file

func (*RotateFileHandler) Handle

func (h *RotateFileHandler) Handle(r *slog.Record) (err error)

Handle the log record

func (*RotateFileHandler) Lock

func (lw *RotateFileHandler) Lock()

Lock it

func (*RotateFileHandler) LockEnabled

func (lw *RotateFileHandler) LockEnabled() bool

LockEnabled status

func (*RotateFileHandler) Unlock

func (lw *RotateFileHandler) Unlock()

Unlock it

func (*RotateFileHandler) UseLock

func (lw *RotateFileHandler) UseLock(enable bool)

UseLock locker

func (*RotateFileHandler) Write

func (h *RotateFileHandler) Write(bts []byte) (n int, err error)

Write logs

type SimpleFileHandler

type SimpleFileHandler struct {

	// LevelWithFormatter support level and formatter
	LevelWithFormatter
	// contains filtered or unexported fields
}

SimpleFileHandler struct - no buffer, will direct write logs to file.

func MustSimpleFile

func MustSimpleFile(filepath string) *SimpleFileHandler

MustSimpleFile new instance

func NewSimpleFile

func NewSimpleFile(filepath string) (*SimpleFileHandler, error)

NewSimpleFileHandler new instance

func NewSimpleFileHandler

func NewSimpleFileHandler(filepath string) (*SimpleFileHandler, error)

NewSimpleFileHandler instance

Usage:

h, err := NewSimpleFileHandler("", DefaultFileFlags)

custom file flags

h, err := NewSimpleFileHandler("", os.O_CREATE | os.O_WRONLY | os.O_APPEND)

custom formatter

h.SetFormatter(slog.NewJSONFormatter())
slog.PushHandler(h)
slog.Info("log message")

func (*SimpleFileHandler) Close

func (h *SimpleFileHandler) Close() error

Close handler, will be flush logs to file, then close file

func (*SimpleFileHandler) Flush

func (h *SimpleFileHandler) Flush() error

Flush logs to disk file

func (*SimpleFileHandler) Handle

func (h *SimpleFileHandler) Handle(r *slog.Record) (err error)

Handle the log record

func (*SimpleFileHandler) Lock

func (lw *SimpleFileHandler) Lock()

Lock it

func (*SimpleFileHandler) LockEnabled

func (lw *SimpleFileHandler) LockEnabled() bool

LockEnabled status

func (*SimpleFileHandler) ReopenFile

func (h *SimpleFileHandler) ReopenFile() error

ReopenFile the log file

func (*SimpleFileHandler) Unlock

func (lw *SimpleFileHandler) Unlock()

Unlock it

func (*SimpleFileHandler) UseLock

func (lw *SimpleFileHandler) UseLock(enable bool)

UseLock locker

func (*SimpleFileHandler) Write

func (h *SimpleFileHandler) Write(bts []byte) (n int, err error)

Write contents to *os.File

func (*SimpleFileHandler) Writer

func (h *SimpleFileHandler) Writer() io.Writer

Writer return *os.File

type SizeRotateFileHandler

type SizeRotateFileHandler struct {
	FileHandler

	// file contents max size
	MaxSize uint64
	// RenameFunc build filename for rotate file
	RenameFunc func(fpath string, rotateNum uint) string
	// contains filtered or unexported fields
}

SizeRotateFileHandler struct definition

func MustSizeRotateFile

func MustSizeRotateFile(logfile string, maxSize uint64) *SizeRotateFileHandler

MustSizeRotateFile instance

func NewSizeRotateFile

func NewSizeRotateFile(logfile string, maxSize uint64) (*SizeRotateFileHandler, error)

NewSizeRotateFile instance

func NewSizeRotateFileHandler

func NewSizeRotateFileHandler(logfile string, maxSize uint64) (*SizeRotateFileHandler, error)

NewSizeRotateFileHandler instance

func (*SizeRotateFileHandler) Handle

func (h *SizeRotateFileHandler) Handle(r *slog.Record) (err error)

Handle the log record

func (*SizeRotateFileHandler) Lock

func (lw *SizeRotateFileHandler) Lock()

Lock it

func (*SizeRotateFileHandler) LockEnabled

func (lw *SizeRotateFileHandler) LockEnabled() bool

LockEnabled status

func (*SizeRotateFileHandler) Unlock

func (lw *SizeRotateFileHandler) Unlock()

Unlock it

func (*SizeRotateFileHandler) UseLock

func (lw *SizeRotateFileHandler) UseLock(enable bool)

UseLock locker

type SysLogHandler

type SysLogHandler struct {
	LevelWithFormatter
	// contains filtered or unexported fields
}

SysLogHandler struct

func NewSysLogHandler

func NewSysLogHandler(priority syslog.Priority, tag string) (*SysLogHandler, error)

NewSysLogHandler instance

func (*SysLogHandler) Close

func (h *SysLogHandler) Close() error

func (*SysLogHandler) Flush

func (h *SysLogHandler) Flush() error

func (*SysLogHandler) Handle

func (h *SysLogHandler) Handle(record *slog.Record) error

Handle an record

type TimeRotateFileHandler

type TimeRotateFileHandler struct {

	// LevelsWithFormatter support limit log levels and formatter
	LevelsWithFormatter
	// contains filtered or unexported fields
}

TimeRotateFileHandler struct refer http://hg.python.org/cpython/file/2.7/Lib/logging/handlers.py refer https://github.com/flike/golog/blob/master/filehandler.go TODO Support custom rotate time. Cut log files on the whole point

func MustTimeRotateFile

func MustTimeRotateFile(logfile string, rt rotateTime) *TimeRotateFileHandler

MustTimeRotateFile instance

func NewTimeRotateFile

func NewTimeRotateFile(logfile string, rt rotateTime) (*TimeRotateFileHandler, error)

NewTimeRotateFile instance

func NewTimeRotateFileHandler

func NewTimeRotateFileHandler(logfile string, rt rotateTime) (*TimeRotateFileHandler, error)

NewTimeRotateFileHandler instance

func (*TimeRotateFileHandler) Close

func (h *TimeRotateFileHandler) Close() error

Close handler, will be flush logs to file, then close file

func (*TimeRotateFileHandler) CloseBuffer

func (h *TimeRotateFileHandler) CloseBuffer()

CloseBuffer for write logs

func (*TimeRotateFileHandler) Flush

func (h *TimeRotateFileHandler) Flush() error

Flush logs to disk file

func (*TimeRotateFileHandler) Handle

func (h *TimeRotateFileHandler) Handle(r *slog.Record) (err error)

Handle the log record

func (*TimeRotateFileHandler) Lock

func (lw *TimeRotateFileHandler) Lock()

Lock it

func (*TimeRotateFileHandler) LockEnabled

func (lw *TimeRotateFileHandler) LockEnabled() bool

LockEnabled status

func (*TimeRotateFileHandler) Unlock

func (lw *TimeRotateFileHandler) Unlock()

Unlock it

func (*TimeRotateFileHandler) UseLock

func (lw *TimeRotateFileHandler) UseLock(enable bool)

UseLock locker

func (*TimeRotateFileHandler) Write

func (h *TimeRotateFileHandler) Write(bts []byte) (n int, err error)

Write logs

Jump to

Keyboard shortcuts

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