handler

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Dec 28, 2020 License: MIT Imports: 11 Imported by: 30

Documentation

Overview

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

Index

Examples

Constants

View Source
const (
	EveryDay rotateType = iota
	EveryHour
	Every30Minutes
	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
	// perm and flags for create log file
	DefaultFilePerm  = 0664
	DefaultFileFlags = os.O_CREATE | os.O_WRONLY | os.O_APPEND
)

Functions

This section is empty.

Types

type BufferedHandler

type BufferedHandler struct {
	LevelsWithFormatter

	// options:
	// BuffSize for buffer
	BuffSize int
	// contains filtered or unexported fields
}

BufferedHandler definition

func NewBufferedHandler

func NewBufferedHandler(handler slog.WriterHandler, 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 to the `h.handler.Writer()`

func (*BufferedHandler) Handle

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

Handle log record

func (*BufferedHandler) Lock added in v0.1.0

func (l *BufferedHandler) Lock()

Lock it

func (*BufferedHandler) LockEnabled added in v0.1.0

func (l *BufferedHandler) LockEnabled() bool

LockEnabled status

func (*BufferedHandler) Unlock added in v0.1.0

func (l *BufferedHandler) Unlock()

Unlock it

func (*BufferedHandler) UseLock added in v0.1.0

func (l *BufferedHandler) UseLock(enable bool)

UseLock locker

type ConsoleHandler

type ConsoleHandler struct {
	StreamHandler
}

ConsoleHandler definition

func NewConsoleHandler

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

NewConsoleHandler create new ConsoleHandler

func (*ConsoleHandler) Lock added in v0.1.0

func (l *ConsoleHandler) Lock()

Lock it

func (*ConsoleHandler) LockEnabled added in v0.1.0

func (l *ConsoleHandler) LockEnabled() bool

LockEnabled status

func (*ConsoleHandler) TextFormatter added in v0.0.5

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

TextFormatter get the formatter

func (*ConsoleHandler) Unlock added in v0.1.0

func (l *ConsoleHandler) Unlock()

Unlock it

func (*ConsoleHandler) UseLock added in v0.1.0

func (l *ConsoleHandler) UseLock(enable bool)

UseLock locker

type EmailHandler added in v0.0.5

type EmailHandler struct {
	// LevelWithFormatter support level and formatter
	LevelWithFormatter
}

EmailHandler 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

func JSONFileHandler

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

JSONFileHandler create new FileHandler with JSON formatter

func MustFileHandler added in v0.1.0

func MustFileHandler(filepath string, useJSON bool) *FileHandler

MustFileHandler create file handler

func NewFileHandler

func NewFileHandler(filepath 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 added in v0.1.0

func (l *FileHandler) Lock()

Lock it

func (*FileHandler) LockEnabled added in v0.1.0

func (l *FileHandler) LockEnabled() bool

LockEnabled status

func (*FileHandler) ReopenFile added in v0.1.0

func (h *FileHandler) ReopenFile() error

ReopenFile the log file

func (*FileHandler) Unlock added in v0.1.0

func (l *FileHandler) Unlock()

Unlock it

func (*FileHandler) UseLock added in v0.1.0

func (l *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 LevelWithFormatter added in v0.0.3

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

LevelsWithFormatter struct definition

- support set log formatter - support setting multi log levels

func (*LevelWithFormatter) IsHandling added in v0.0.3

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

IsHandling Check if the current level can be handling

type LevelsWithFormatter added in v0.0.3

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

LevelsWithFormatter struct definition

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

func (*LevelsWithFormatter) IsHandling added in v0.0.3

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

IsHandling Check if the current level can be handling

type MultiFileHandler added in v0.0.3

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
	// FileFlag for create. default: os.O_CREATE|os.O_WRONLY|os.O_APPEND
	FileFlag int
	// FileMode perm for create log file. (it's os.FileMode)
	FileMode uint32
	// BuffSize for enable buffer
	BuffSize int
	// file contents max size
	MaxSize uint64
	// contains filtered or unexported fields
}

MultiFileHandler definition

func NewMultiFileHandler added in v0.0.3

func NewMultiFileHandler() *MultiFileHandler

NewMultiFileHandler instance

Example
package main

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

func main() {
	h := &handler.MultiFileHandler{
		FileDir: "testdata/multifiles",
		FileLevels: map[string]slog.Levels{
			"error.log": {slog.ErrorLevel, slog.WarnLevel},
			"info.log":  {slog.InfoLevel, slog.NoticeLevel, slog.DebugLevel, slog.TraceLevel},
		},
	}

	slog.AddHandler(h)

	// add logs
	slog.Info("info messages")
}

func (*MultiFileHandler) Close added in v0.0.5

func (h *MultiFileHandler) Close() error

func (*MultiFileHandler) Flush added in v0.0.5

func (h *MultiFileHandler) Flush() error

func (*MultiFileHandler) Handle added in v0.0.5

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

func (*MultiFileHandler) IsHandling added in v0.0.5

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

IsHandling Check if the current level can be handling

type RotateFileHandler

type RotateFileHandler struct {
	FileHandler

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

RotateFileHandler struct definition

func NewRotateFileHandler added in v0.1.0

func NewRotateFileHandler(filepath string, maxSize uint64) (*RotateFileHandler, error)

NewRotateFileHandler instance

func (*RotateFileHandler) Handle added in v0.1.0

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

Handle the log record

func (*RotateFileHandler) Lock added in v0.1.0

func (l *RotateFileHandler) Lock()

Lock it

func (*RotateFileHandler) LockEnabled added in v0.1.0

func (l *RotateFileHandler) LockEnabled() bool

LockEnabled status

func (*RotateFileHandler) Unlock added in v0.1.0

func (l *RotateFileHandler) Unlock()

Unlock it

func (*RotateFileHandler) UseLock added in v0.1.0

func (l *RotateFileHandler) UseLock(enable bool)

UseLock locker

type SimpleFileHandler added in v0.1.0

type SimpleFileHandler struct {

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

SimpleFileHandler struct

func NewSimpleFileHandler added in v0.1.0

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 added in v0.1.0

func (h *SimpleFileHandler) Close() error

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

func (*SimpleFileHandler) Flush added in v0.1.0

func (h *SimpleFileHandler) Flush() error

Flush logs to disk file

func (*SimpleFileHandler) Handle added in v0.1.0

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

Handle the log record

func (*SimpleFileHandler) Lock added in v0.1.0

func (l *SimpleFileHandler) Lock()

Lock it

func (*SimpleFileHandler) LockEnabled added in v0.1.0

func (l *SimpleFileHandler) LockEnabled() bool

LockEnabled status

func (*SimpleFileHandler) ReopenFile added in v0.1.0

func (h *SimpleFileHandler) ReopenFile() error

ReopenFile the log file

func (*SimpleFileHandler) Unlock added in v0.1.0

func (l *SimpleFileHandler) Unlock()

Unlock it

func (*SimpleFileHandler) UseLock added in v0.1.0

func (l *SimpleFileHandler) UseLock(enable bool)

UseLock locker

func (*SimpleFileHandler) Writer added in v0.1.0

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

Writer return *os.File

type StreamHandler

type StreamHandler struct {
	LevelsWithFormatter

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

StreamHandler definition

func NewStreamHandler

func NewStreamHandler(out io.Writer, levels []slog.Level) *StreamHandler

NewStreamHandler create new StreamHandler Usage:

buf := new(bytes.Buffer)
h := handler.NewStreamHandler(&buf, slog.AllLevels)
f, err := os.OpenFile("my.log", ...)
h := handler.NewStreamHandler(f, slog.AllLevels)

func (*StreamHandler) Close

func (h *StreamHandler) Close() error

Close the handler

func (*StreamHandler) Flush added in v0.1.0

func (h *StreamHandler) Flush() error

Flush the handler

func (*StreamHandler) Handle

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

Handle log record

func (*StreamHandler) Lock added in v0.1.0

func (l *StreamHandler) Lock()

Lock it

func (*StreamHandler) LockEnabled added in v0.1.0

func (l *StreamHandler) LockEnabled() bool

LockEnabled status

func (*StreamHandler) Unlock added in v0.1.0

func (l *StreamHandler) Unlock()

Unlock it

func (*StreamHandler) UseLock

func (l *StreamHandler) UseLock(enable bool)

UseLock locker

type SysLogHandler added in v0.1.0

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

SysLogHandler struct

func NewSysLogHandler added in v0.1.0

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

NewSysLogHandler instance

func (*SysLogHandler) Close added in v0.1.0

func (h *SysLogHandler) Close() error

func (*SysLogHandler) Flush added in v0.1.0

func (h *SysLogHandler) Flush() error

func (*SysLogHandler) Handle added in v0.1.0

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

Handle an record

type TimeRotateFileHandler added in v0.1.0

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

func NewTimeRotateFileHandler added in v0.1.0

func NewTimeRotateFileHandler(filepath string, rt rotateType) (*TimeRotateFileHandler, error)

NewTimeRotateFileHandler instance

func (*TimeRotateFileHandler) Close added in v0.1.0

func (h *TimeRotateFileHandler) Close() error

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

func (*TimeRotateFileHandler) Flush added in v0.1.0

func (h *TimeRotateFileHandler) Flush() error

Flush logs to disk file

func (*TimeRotateFileHandler) Handle added in v0.1.0

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

Handle the log record

func (*TimeRotateFileHandler) Lock added in v0.1.0

func (l *TimeRotateFileHandler) Lock()

Lock it

func (*TimeRotateFileHandler) LockEnabled added in v0.1.0

func (l *TimeRotateFileHandler) LockEnabled() bool

LockEnabled status

func (*TimeRotateFileHandler) Unlock added in v0.1.0

func (l *TimeRotateFileHandler) Unlock()

Unlock it

func (*TimeRotateFileHandler) UseLock added in v0.1.0

func (l *TimeRotateFileHandler) UseLock(enable bool)

UseLock locker

Jump to

Keyboard shortcuts

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