log

package
v1.0.73 Latest Latest
Warning

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

Go to latest
Published: Jun 26, 2025 License: MIT, MIT Imports: 12 Imported by: 0

README

The Go Log

Go Log is customizable modular log.

Download and Install
go get github.com/zooyer/log
Features
  • zero config, out of the box feature
  • customizable modular
  • high performance
  1. zero config

    package main
    
    import (
    	"github.com/zooyer/log"
    )
    
    func main() {
        // 0 configs
    	log.D("debug message")   // 2019-10-28 23:07:56.369 DEBUG "debug message"
    	log.I("info message")    // 2019-10-28 23:07:56.369 INFO "info message"
    	log.W("warning message") // 2019-10-28 23:07:56.369 WARNING "warning message"
    	log.E("error message")   // 2019-10-28 23:07:56.369 ERROR "error message"
    }
    

    output:

    2019-10-28 23:07:56.369 DEBUG "debug message"
    2019-10-28 23:07:56.369 INFO "info message"
    2019-10-28 23:07:56.369 WARNING "warning message"
    2019-10-28 23:07:56.369 ERROR "error message"
    
  2. custom

    package main
    
    import (
    	"time"
    
    	"github.com/zooyer/log"
    )
    
    func main() {
    	// 1. create file rotating(default: size/time)
    	rotating := log.NewFileCountRotating(1024, 10)
    
    	// 2. create file recorder(default: terminal/file/network), custom formatter: json/text
    	recorder, err := log.NewFileRecorder("example.log", log.FormatJson, rotating)
    	if err != nil {
    		panic(err)
    	}
    	defer recorder.Close()
    
    	// 3. create logger, each level can be mapped to different recorder
    	logger := log.NewLogger()
    	logger.SetRecorder(recorder, "DEBUG", "INFO")
    	logger.SetDefault(recorder)
    
    	// 4. create log, logger's wrap
    	l := log.NewLog(logger)
    	l.Tag("id", "1001").Tag("type", "test").Debug("custom debug log")
    	l.Error("custom error log")
    
    	// 5. custom
    	var record = new(log.Record)
    	record.Time = time.Now()
    	record.Level = "record"
    	record.Message = "custom log"
    	record.Tag = make(log.Tag)
    	record.Tag["id"] = "1001"
    	record.Tag["type"] = "test"
    	logger.Record(record)
    }
    

    output:

    cat example.log
    {"level":"DEBUG","message":"custom debug log","tag":{"id":"1001","type":"test"},"time":"2019-10-28 23:41:34.385"}
    {"level":"ERROR","message":"custom error log","time":"2019-10-28 23:41:34.386"}
    {"level":"record","message":"custom log","tag":{"id":"1001","type":"test"},"time":"2019-10-28 23:41:34.386"}
    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func D

func D(v ...interface{})

func Debug

func Debug(v ...interface{})

func E

func E(v ...interface{})

func Error

func Error(v ...interface{})

func F

func F(v ...interface{})

func Fatal

func Fatal(v ...interface{})

func I

func I(v ...interface{})

func Info

func Info(v ...interface{})

func W

func W(v ...interface{})

func Warning

func Warning(v ...interface{})

Types

type Config

type Config struct {
	Filename string // 文件名
	Output   string // stdout/stderr/file
	Level    string
	Align    bool
	Interval time.Duration
}

type FileCountRotating

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

FileCountRotating

func NewFileCountRotating

func NewFileCountRotating(maxBytes, bakCount int) *FileCountRotating

func (*FileCountRotating) Rotating

func (f *FileCountRotating) Rotating(filename string, file *os.File) *os.File

type FileRecorder

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

FileRecorder

func NewFileRecorder

func NewFileRecorder(filename string, formatter Formatter, rotating FileRotating) (*FileRecorder, error)

func (*FileRecorder) Close

func (f *FileRecorder) Close()

func (*FileRecorder) Record

func (f *FileRecorder) Record(record ...*Record)

type FileRotating

type FileRotating interface {
	Rotating(filename string, file *os.File) *os.File
}

FileRotating

type FileTimeRotating

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

FileTimeRotating

func NewFileTimeRotating

func NewFileTimeRotating(interval time.Duration, align bool) *FileTimeRotating

func (*FileTimeRotating) Rotating

func (f *FileTimeRotating) Rotating(filename string, file *os.File) *os.File

type Formatter

type Formatter func(record *Record) string

func JSONFormatter

func JSONFormatter(indent bool) Formatter

{"time":"2020-10-25T16:36:04.4143659+08:00","level":"DEBUG","tag":[{"key":"module","value":"apollo"},{"key":"trace","value":"10001241235"},{"key":"type","value":"rpc"},{"key":"rpc","value":"http"},{"key":"latency","value":"10"},{"key":"other","value":{"json":"value"," ":" "}}],"message":"hello world"}

func TextFormatter

func TextFormatter(color bool) Formatter
date        time     level      tag                                           message

2019-10-27 00:04:36.028 DEBUG "trace"="10001241235" "type"="rpc" "rpc"="http" "hello world"

type Logger

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

func New

func New(config Config, formatter Formatter) (*Logger, error)

func (*Logger) Debug

func (l *Logger) Debug(ctx context.Context, v ...interface{})

func (*Logger) Error

func (l *Logger) Error(ctx context.Context, v ...interface{})

func (*Logger) Fatal

func (l *Logger) Fatal(ctx context.Context, v ...interface{})

func (*Logger) Info

func (l *Logger) Info(ctx context.Context, v ...interface{})

func (*Logger) New

func (l *Logger) New() *Logger

func (*Logger) SetDefaultRecorder

func (l *Logger) SetDefaultRecorder(recorder Recorder)

func (*Logger) SetRecorder

func (l *Logger) SetRecorder(level string, recorder Recorder)

func (*Logger) Tag

func (l *Logger) Tag(keep bool, kv ...interface{}) *Logger

func (*Logger) Warning

func (l *Logger) Warning(ctx context.Context, v ...interface{})

type Record

type Record struct {
	Time    time.Time `json:"time"`
	Level   string    `json:"level"`
	Tag     []Tag     `json:"tag,omitempty"`
	Message string    `json:"message"`
}

func (*Record) Reset

func (r *Record) Reset()

type RecordBuffer

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

RecordBuffer

func NewRecordBuffer

func NewRecordBuffer(recorder Recorder) *RecordBuffer

func NewRecordBufferSize

func NewRecordBufferSize(recorder Recorder, size int) *RecordBuffer

func (*RecordBuffer) Available

func (r *RecordBuffer) Available() int

func (*RecordBuffer) Buffered

func (r *RecordBuffer) Buffered() int

func (*RecordBuffer) Close

func (r *RecordBuffer) Close()

func (*RecordBuffer) Flush

func (r *RecordBuffer) Flush()

func (*RecordBuffer) Record

func (r *RecordBuffer) Record(record ...*Record)

func (*RecordBuffer) Reset

func (r *RecordBuffer) Reset(recorder Recorder)

func (*RecordBuffer) Size

func (r *RecordBuffer) Size() int

type Recorder

type Recorder interface {
	Record(record ...*Record)
	Close()
}

Recorder

type StdioRecorder

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

StdioRecorder

func NewStderrRecorder

func NewStderrRecorder(formatter Formatter) *StdioRecorder

func NewStdoutRecorder

func NewStdoutRecorder(formatter Formatter) *StdioRecorder

func (*StdioRecorder) Close

func (s *StdioRecorder) Close()

func (*StdioRecorder) Record

func (s *StdioRecorder) Record(record ...*Record)

type Tag

type Tag struct {
	Key   string      `json:"key"`
	Value interface{} `json:"value"`
}

Jump to

Keyboard shortcuts

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