onelog

package module
v0.0.0-...-4acb61c Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2020 License: BSD-3-Clause Imports: 16 Imported by: 1

README

onelog

一个go的日志操作,当前底层使用zerolog做为底层。后续向可桥接其他底层log进发。

特性

  • 一个快速的、容易上手的全功能日志
  • 使用配置文件,无需复杂的配置
  • 日志可打印控制台也可直接写入文件当中
  • 日志格式可根据自己需要指定
  • 日志的格式与writer可扩展

关于执行速度

我们认为生产环境的日志主要用来写入文件,而不是输出至控制台。因此本日志主要关注写入文件时的效率,并对此进行了优化。

安装

go get -u github.com/udbjqrmna/onelog/log

最简单的使用方式

import github.com/udbjqrmna/onelog/log

func main(){
  log.Debug().Bool("boolVal", true).Int("intVal", 10).Msg("Hello world.")
}

log默认使用输出为 os.Stdout
log默认使用记录格式为 json
log默认使用记录等级为 debug
Int()方法可在日志当中记录一个int值,相似的还有Hex()String()Float64()Bool()
每次记录日志需要以Msg()做为最后的结束,未使用将不会被写入

新建日志对象

使用 New(writer Writer, level Level, pattern WritePattern) 方法得到一个新的日志对象,此对象为线程安全对象,可直接在线程当中使用

import github.com/udbjqrmna/onelog

func main(){
  var log = onelog.New(&onelog.Stdout{os.Stderr}, onelog.InfoLevel, &onelog.JsonPattern{})

  log.Debug().Bool("boolVal", true).Int("intVal", 10).Msg("Hello world.")

  log.Close()
}

在使用了FileWriter时,需要在程序结束的时候对log进行Close()操作,用以保证将缓存的内容写入至文件内

使用配置文件

使用 NewLogFromConfig(path string) 方法进行配置调用,配置好的log对象可使用 GetLog(name string) 方法获得

代码
import github.com/udbjqrmna/onelog

func main(){
 if err := onelog.NewLogFromConfig("./config/log.json"); err != nil {
    fmt.Println(err)
 }

 log := onelog.GetLog("three")

 log.Info().Int("k",i).Msg("abcdefig")

 log.Close()
}
log.json 文件
{
  "LogLevel": "Trace",
  "Pattern": "JsonPattern",
  "Writer": "file",
  "WriterPara": {
    "LogsRoot": "./logs",
    "FileName": "log.log",
    "MaxCapacity": 1
  },
  "Logs": [
    {
      "Id": "one",
      "LogLevel": "Trace",
      "Pattern": "JsonPattern",
      "Writer": "file",
      "WriterPara": {
        "LogsRoot": "./logs.abc/ce",
        "FileName": "log2.log",
        "MaxCapacity": 1
      }
    },
    {
      "Id": "two",
      "LogLevel": "Info",
      "Pattern": "old",
      "Writer": "console",
      "WriterPara": {
        "Console": "Stderr"
      }
    },
    {
      "Id": "three",
      "LogLevel": "Info",
      "Pattern": "JsonPattern",
      "Writer": "multiple",
      "WriterPara": [
        {
          "Writer": "console",
          "WriterPara": {
            "Console": "Stderr"
          }
        },
        {
          "Writer": "file",
          "WriterPara": {
            "LogsRoot": "./logs23",
            "FileName": "multiple.log",
            "MaxCapacity": 5
          }
        }
      ]
    }
  ]
}

如果使用了自定义的Pattern或Writer对象时,需要使用RegisterInitRef 方法进行注册,这样才能正确的获得
根结构当中指定的LogLevelPatternWriter为默认值,在Logs节当中有未指定的时候使用根当中。

其他

日志等级:
  • TraceLevel 跟踪等级,此等级为最低级
  • DebugLevel
  • InfoLevel
  • WarnLevel
  • ErrorLevel
  • FatalLevel
  • PanicLevel
  • Disable 此等级将禁止日志的记录
日志格式

提供JsonPatternOldPattern两种日志的格式,当然也可自己指定定义的日志格式。 在New()方法或配置文件的Pattern值当中指定使用的

写入对象

提供StdoutFileWriterMultipleWriter三种写入方式。当然也可自己指定定义的写入。

日志通用项

可为每一个日志的每一个日志等级实现独立的通用项设置,通用项设置好之后,每次日志将都自动将通用项带上

import github.com/udbjqrmna/onelog

func main(){
  fw, _ := onelog.NewFileWriter("./logs/a.log", 5000000)
  mul := onelog.NewMultipleWriter(fw, &onelog.Stdout{os.Stdout})

  var log = onelog.New(mul, onelog.TraceLevel, &onelog.JsonPattern{})

  onelog.LevelName = "L"
  onelog.TimeFormat = ""

 log.Debug().AddRuntime(&CoroutineID{}).AddStatic("static", "staticValue")
 log.Error().AddRuntime(&CoroutineID{}).AddRuntime(&Caller{	CallerSkipFrameCount:1}).AddStatic("a1", "b2")

  log.Error().Int("INT", 10).Bool("B", true).Msg("This is a ErrorLevel")
  log.Debug().Int("INT", 10).Bool("B", true).Msg("This is a DebugLevel")

  log.Close()
}
静态通用项

使用AddStatic()方法为每一个日志的日志等级进行独立的设置。每个设置将不影响其他等级的数据。

运行时通用项
  • CoroutineID 对象将获得当前执行此日志时的协程ID,可设置onelog.CoroutineIDName的值来改变它的项目名称。效率较低,可使用plugin内的CoroutineIDBySrc对象替换,具体使用见 plugin/RunTimeCompute.go文件
  • Caller 对象获得当前调用者的文件与行数。可设置onelog.CallerName的值来改变它的项目名称,也可设置CallerSkipFrameCount的值来跳过几次函数的调用。
  • 时间的运行时通用项是日志对象构建时自动加入的。可以使用onelog.TimeFormat方式进行改变.如直接设置成“”将使用UNIX时间的long值。

设置名称的代码需要放至log日志实例或NewLogFromConfig方法之前进行。因此最简单的使用方式无法变更日志项名称

  • plugin.CoroutineIDBySrc 使用修改源码方式来获得当前执行此日志时的协程ID,可设置plugin.CoroutineIDName的值来改变它的项目名称。使用此类前需要查看说明
日志项名称自定义

每个日志项默认的名称可进行使用,使用类似onelog.LevelName = "L"的方法进行修改。

此设置代码需要放至log日志实例或NewLogFromConfig方法之前进行。因此最简单的使用方式无法变更日志项名称

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	MessageName     = "msg"
	CoroutineIDName = "cid"
	LevelName       = "level"
	TimeName        = "time"
	TimeFormat      = time.RFC3339
	CallerName      = "caller"
	ErrorName       = "err"
)
View Source
var FALSE = []byte("false")
View Source
var TRUE = []byte("true")

Functions

func CompressFile

func CompressFile(fileName string, dest string) error

CompressFile 使用gzip压缩成gz

func NewLogFromConfig

func NewLogFromConfig(path string) error

NewLogFromConfig 新创建日志对象从指定的配置文件当中 并转码进入给出的config 对象当中 path 配置文件所在路径

func RegisterInitRef

func RegisterInitRef(init func(map[string]interface{}, map[string]interface{})) error

RegisterInitRef 注册自己相关的初始化对象,此方法接受一个func(map[string]Pattern, map[string]Writer)参数。 在func(map[string]Pattern, map[string]Writer) 方法内增加对应配置文件的名称与对象

func SaveLogList

func SaveLogList(name string, log *Logger)

SaveLogList 将一个日志对象存入日志列表当中

Types

type Caller

type Caller struct {
	CallerSkipFrameCount int
}

Caller 得到当前的调用者信息,可根据跳过值增加

func (*Caller) GetName

func (*Caller) GetName() string

func (*Caller) Values

func (c *Caller) Values() []byte

type CoroutineID

type CoroutineID struct {
}

func (*CoroutineID) GetName

func (cid *CoroutineID) GetName() string

func (*CoroutineID) Values

func (cid *CoroutineID) Values() []byte

type DefaultLevelWriter

type DefaultLevelWriter struct {
	Pattern Pattern
	Writer  Writer
	// contains filtered or unexported fields
}

func (*DefaultLevelWriter) AddRuntime

func (lw *DefaultLevelWriter) AddRuntime(r RunTimeCompute) LevelWriter

func (*DefaultLevelWriter) AddStatic

func (lw *DefaultLevelWriter) AddStatic(name, value string) LevelWriter

func (*DefaultLevelWriter) Bool

func (lw *DefaultLevelWriter) Bool(key string, b bool) LevelWriter

func (*DefaultLevelWriter) Bytes

func (lw *DefaultLevelWriter) Bytes(key string, bytes []byte) LevelWriter

func (*DefaultLevelWriter) Error

func (lw *DefaultLevelWriter) Error(error error) LevelWriter

func (*DefaultLevelWriter) Float32

func (lw *DefaultLevelWriter) Float32(key string, value float32) LevelWriter

func (*DefaultLevelWriter) Float64

func (lw *DefaultLevelWriter) Float64(key string, value float64) LevelWriter

func (*DefaultLevelWriter) Hex

func (lw *DefaultLevelWriter) Hex(key string, value int) LevelWriter

func (*DefaultLevelWriter) Int

func (lw *DefaultLevelWriter) Int(key string, value int) LevelWriter

func (*DefaultLevelWriter) Int64

func (lw *DefaultLevelWriter) Int64(key string, value int64) LevelWriter

func (*DefaultLevelWriter) Msg

func (lw *DefaultLevelWriter) Msg(message string)

func (*DefaultLevelWriter) Msgf

func (lw *DefaultLevelWriter) Msgf(message string, p ...interface{})

func (*DefaultLevelWriter) String

func (lw *DefaultLevelWriter) String(key, value string) LevelWriter

func (*DefaultLevelWriter) Uint

func (lw *DefaultLevelWriter) Uint(key string, value uint) LevelWriter

func (*DefaultLevelWriter) Uint64

func (lw *DefaultLevelWriter) Uint64(key string, value uint64) LevelWriter

type DisableLevelWriter

type DisableLevelWriter struct {
}

func (*DisableLevelWriter) AddRuntime

func (dlw *DisableLevelWriter) AddRuntime(r RunTimeCompute) LevelWriter

func (*DisableLevelWriter) AddStatic

func (dlw *DisableLevelWriter) AddStatic(name, value string) LevelWriter

func (*DisableLevelWriter) Bool

func (dlw *DisableLevelWriter) Bool(key string, b bool) LevelWriter

func (*DisableLevelWriter) Bytes

func (dlw *DisableLevelWriter) Bytes(key string, bytes []byte) LevelWriter

func (*DisableLevelWriter) Error

func (dlw *DisableLevelWriter) Error(error error) LevelWriter

func (*DisableLevelWriter) Float32

func (dlw *DisableLevelWriter) Float32(key string, value float32) LevelWriter

func (*DisableLevelWriter) Float64

func (dlw *DisableLevelWriter) Float64(key string, value float64) LevelWriter

func (*DisableLevelWriter) Hex

func (dlw *DisableLevelWriter) Hex(key string, value int) LevelWriter

func (*DisableLevelWriter) Int

func (dlw *DisableLevelWriter) Int(key string, value int) LevelWriter

func (*DisableLevelWriter) Int64

func (dlw *DisableLevelWriter) Int64(key string, value int64) LevelWriter

func (*DisableLevelWriter) Msg

func (dlw *DisableLevelWriter) Msg(message string)

Msg 什么都不干的一个东西,直接返回。

func (*DisableLevelWriter) Msgf

func (dlw *DisableLevelWriter) Msgf(message string, p ...interface{})

func (*DisableLevelWriter) String

func (dlw *DisableLevelWriter) String(key, value string) LevelWriter

func (*DisableLevelWriter) Uint

func (dlw *DisableLevelWriter) Uint(key string, value uint) LevelWriter

func (*DisableLevelWriter) Uint64

func (dlw *DisableLevelWriter) Uint64(key string, value uint64) LevelWriter

type FileWriter

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

func NewFileWriter

func NewFileWriter(fileName string, maxCapacity int64) (*FileWriter, error)

func (*FileWriter) Close

func (w *FileWriter) Close()

Close 当程序关闭时调用的操作

func (*FileWriter) SetConfig

func (w *FileWriter) SetConfig(config interface{}) error

SetConfig 设置相关参数

func (*FileWriter) Write

func (w *FileWriter) Write(p []byte) (n int, err error)

type JsonPattern

type JsonPattern struct {
}

JsonPattern JSON的记录格式

func (*JsonPattern) AppendFloat64

func (json *JsonPattern) AppendFloat64(buffer []byte, val float64) []byte

AppendFloat64 将一个float64值记录缓存中

func (*JsonPattern) AppendInt64

func (json *JsonPattern) AppendInt64(buffer []byte, value int64, base int) []byte

AppendInt64 将一个int64的值插入至数据内

func (*JsonPattern) AppendKey

func (json *JsonPattern) AppendKey(buffer []byte, key string) []byte

AppendKey 增加一个key的方法,key必须是一个string格式

func (*JsonPattern) AppendString

func (json *JsonPattern) AppendString(buffer []byte, value string) []byte

AppendString 将一个string的值插入至数据内

func (*JsonPattern) AppendUint32

func (json *JsonPattern) AppendUint32(buffer []byte, value uint32, base int) []byte

AppendUint64 将一个uint64值记录缓存中

func (*JsonPattern) AppendUint64

func (json *JsonPattern) AppendUint64(buffer []byte, value uint64, base int) []byte

AppendUint64 将一个uint64值记录缓存中

func (*JsonPattern) AppendValue

func (json *JsonPattern) AppendValue(buffer []byte, value []byte) []byte

AppendValue 增加一个[]byte数组值的方法

func (*JsonPattern) Complete

func (json *JsonPattern) Complete(buffer []byte) []byte

type Level

type Level uint8
const (
	TraceLevel Level = iota
	// DebugLevel defines debug log level.
	DebugLevel
	// InfoLevel defines info log level.
	InfoLevel
	// WarnLevel defines warn log level.
	WarnLevel
	// ErrorLevel defines error log level.
	ErrorLevel
	// FatalLevel defines fatal log level.
	FatalLevel
	// PanicLevel defines panic log level.
	PanicLevel

	Disable
)

func (Level) String

func (l Level) String() string

type LevelWriter

type LevelWriter interface {
	Int(key string, value int) LevelWriter
	Hex(key string, value int) LevelWriter
	Int64(key string, value int64) LevelWriter
	Uint64(key string, value uint64) LevelWriter
	Uint(key string, value uint) LevelWriter
	String(key, value string) LevelWriter
	Float32(key string, value float32) LevelWriter
	Float64(key string, value float64) LevelWriter
	Bool(key string, b bool) LevelWriter
	Bytes(key string, bytes []byte) LevelWriter
	Error(error error) LevelWriter
	//Msg 进行一次日志的消息写入,必须调用此方法或msgf()方法才能正常写入日志内
	Msg(message string)
	//Msg 进行一次日志的消息写入,参数可参考fmt.Sprintf()方法。
	Msgf(message string, p ...interface{})

	//AddRuntime 增加一个计算值,这个值在每一个日志等级独立,每一次记录日志都将重新计算并记录它
	AddRuntime(r RunTimeCompute) LevelWriter
	//AddStatic 在日志里面增加一个常量值,这个常量值在每一个日志等级独立,每一次记录日志都将进行记录它
	AddStatic(name, value string) LevelWriter
	// contains filtered or unexported methods
}

type Logger

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

func GetLog

func GetLog(name string) *Logger

GetLog 将已经存入日志列表当中的日志对象取出,如果未找到将返回

func New

func New(writer Writer, level Level, pattern Pattern) *Logger

NewLogger 返回一个新的Logger

func (*Logger) AddRuntime

func (l *Logger) AddRuntime(r RunTimeCompute) *Logger

AddRuntime 给此Logger所有日志都增加一个运行时记录

func (*Logger) AddStatic

func (l *Logger) AddStatic(name, value string) *Logger

AddStatic 给此Logger所有日志都增加一个静态

func (*Logger) Close

func (l *Logger) Close()

func (*Logger) Debug

func (l *Logger) Debug() LevelWriter

DebugLevel 返回一个Debug等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) DebugMsg

func (l *Logger) DebugMsg(msg string)

DebugMsg 直接以Debug等级进行一个日志记录

func (*Logger) Error

func (l *Logger) Error() LevelWriter

ErrorLevel 返回一个Error等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) ErrorMsg

func (l *Logger) ErrorMsg(msg string)

ErrorMsg 直接以Error等级进行一个日志记录

func (*Logger) Fatal

func (l *Logger) Fatal() LevelWriter

FatalLevel 返回一个Fatal等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) FatalMsg

func (l *Logger) FatalMsg(msg string)

FatalMsg 直接以Fatal等级进行一个日志记录

func (*Logger) Info

func (l *Logger) Info() LevelWriter

InfoLevel 返回一个INFO等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) InfoMsg

func (l *Logger) InfoMsg(msg string)

InfoMsg 直接以Info等级进行一个日志记录

func (*Logger) Panic

func (l *Logger) Panic() LevelWriter

PanicLevel 返回一个Panic等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) PanicMsg

func (l *Logger) PanicMsg(msg string)

PanicMsg 直接以Panic等级进行一个日志记录

func (*Logger) SetLevel

func (l *Logger) SetLevel(level Level) *Logger

SetLevel 设置Log的记录等级

func (*Logger) SetLevelWriter

func (l *Logger) SetLevelWriter(level Level, leverWriter LevelWriter) *Logger

SetLevelWriter 设置指定等级的LevelWriter对象,如果参数给的是nil.则会替换成DisableLevelWriter对象。

func (*Logger) Trace

func (l *Logger) Trace() LevelWriter

TraceLevel 返回一个Trace等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) TraceMsg

func (l *Logger) TraceMsg(msg string)

TraceMsg 直接以Trace等级进行一个日志记录

func (*Logger) Warn

func (l *Logger) Warn() LevelWriter

WarnLevel 返回一个Warn等级的日志对象。如果整体日志等级高于,则返回nil

func (*Logger) WarnMsg

func (l *Logger) WarnMsg(msg string)

WarnMsg 直接以Warn等级进行一个日志记录

type MistakeType

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

func (*MistakeType) Error

func (e *MistakeType) Error() string

type MultipleWriter

type MultipleWriter struct {
	Writer Writer
	Next   *MultipleWriter
}

func NewMultipleWriter

func NewMultipleWriter(writers ...Writer) *MultipleWriter

func (*MultipleWriter) Close

func (m *MultipleWriter) Close()

func (*MultipleWriter) SetConfig

func (m *MultipleWriter) SetConfig(config interface{}) error

SetConfig 设置相关参数

func (*MultipleWriter) Write

func (m *MultipleWriter) Write(p []byte) (n int, err error)

type NotFoundFile

type NotFoundFile string

func (NotFoundFile) Error

func (e NotFoundFile) Error() string

type NotNil

type NotNil string

func (NotNil) Error

func (e NotNil) Error() string

type NotUnderstand

type NotUnderstand string

func (NotUnderstand) Error

func (e NotUnderstand) Error() string

type OldPattern

type OldPattern struct {
}

OldPattern JSON的记录格式

func (*OldPattern) AppendFloat64

func (old *OldPattern) AppendFloat64(buffer []byte, val float64) []byte

AppendFloat64 将一个float64值记录缓存中

func (*OldPattern) AppendInt64

func (old *OldPattern) AppendInt64(buffer []byte, value int64, base int) []byte

AppendInt64 将一个int64的值插入至数据内

func (*OldPattern) AppendKey

func (old *OldPattern) AppendKey(buffer []byte, key string) []byte

AppendKey 增加一个key的方法,key必须是一个string格式

func (*OldPattern) AppendString

func (old *OldPattern) AppendString(buffer []byte, value string) []byte

AppendString 将一个string的值插入至数据内

func (*OldPattern) AppendUint32

func (old *OldPattern) AppendUint32(buffer []byte, value uint32, base int) []byte

AppendUint64 将一个uint64值记录缓存中

func (*OldPattern) AppendUint64

func (old *OldPattern) AppendUint64(buffer []byte, value uint64, base int) []byte

AppendUint64 将一个uint64值记录缓存中

func (*OldPattern) AppendValue

func (old *OldPattern) AppendValue(buffer []byte, value []byte) []byte

AppendValue 增加一个[]byte数组值的方法

func (*OldPattern) Complete

func (old *OldPattern) Complete(buffer []byte) []byte

type Pattern

type Pattern interface {

	//AppKey 将一个名称记录至缓存中
	AppendKey(buffer []byte, key string) []byte
	//AppendInt64 将一个int64值记录缓存中 base 指明此值以什么格式显示
	AppendInt64(buffer []byte, value int64, base int) []byte
	//AppendUint64 将一个uint64值记录缓存中 base 指明此值以什么格式显示
	AppendUint64(buffer []byte, value uint64, base int) []byte
	//AppendUint64 将一个uint32值记录缓存中 base 指明此值以什么格式显示
	AppendUint32(buffer []byte, value uint32, base int) []byte
	//AppendFloat64 将一个float64值记录缓存中
	AppendFloat64(buffer []byte, value float64) []byte
	//AppValue 将一个值string记录缓存中
	AppendString(buffer []byte, value string) []byte
	//AppValue 将一个值string记录缓存中
	AppendValue(buffer []byte, value []byte) []byte
	//complete 在整个记录完成时调用的方法,这个方法用来最后调整整个记录
	Complete(buffer []byte) []byte
	// contains filtered or unexported methods
}

Pattern 记录的格式

type RunTimeCompute

type RunTimeCompute interface {
	//GetName 在写入日志时需要的名称
	GetName() string
	//Values 在运行时计算得到的值
	Values() []byte
}

RunTimeCompute 运行时计算的接口,实现此接口的可放入运行时值

type RunTimeComputes

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

RunTimeCompute 运行时计算的接口,实现此接口的可放入运行时值

type Stdout

type Stdout struct {
	Writer io.Writer
}

func (*Stdout) Close

func (*Stdout) Close()

func (*Stdout) SetConfig

func (s *Stdout) SetConfig(config interface{}) error

SetConfig 设置相关参数

func (*Stdout) Write

func (s *Stdout) Write(p []byte) (n int, err error)

type TimeValue

type TimeValue struct {
}

TimeValue 得到当前时间的值

func (*TimeValue) GetName

func (t *TimeValue) GetName() string

func (*TimeValue) Values

func (t *TimeValue) Values() []byte

type Writer

type Writer interface {
	io.Writer
	Close()
	SetConfig(config interface{}) error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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