log

package
v1.2.2 Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2023 License: Apache-2.0 Imports: 9 Imported by: 0

README

介绍

dlog是用GO语言实现的一个简单高效、支持文件轮换以及日志分级的日志SDK。其特征如下:

  • 采用文件日志类型采用了内存缓存,满足高性能输出日志。
  • 支持日志分级,具体分级如下:
    • fatal (log.LOG_FATAL)
    • error (log.LOG_ERROR)
    • warn (log.LOG_WARN)
    • info (log.LOG_INFO)
    • debug (log.LOG_DEBUG)
  • 支持终端日志类型以及可按照时间进行轮换的文件日志类型。
  • 文件日志类型支持按照天或小时进行轮换输出。

安装说明

go get github.com/haming123/wego/dlog

输出日志到终端

dlog的缺省日志类型为:TermLogger(终端日志类型),使用TermLogger时不需要初始化,可直接使用日志输出函数输出日志。

package main
import log "dlog"
func main()  {
	log.Debug("This is a Debug Message")
	log.Info("This is a Info Message")
}
//执行后的输出结果为:
//2021/11/30 07:20:06 [D] main.go:31 This is a Debug Message
//2021/11/30 07:20:06 [I] main.go:32 This is a Debug Info

日志级别

dlog支持5个日志级别,分别是:fatal、error、warn、info、debug。

package main
import log "dlog"
func main()  {
	log.Debug("This is Debug Message")
	log.Info("This is Info Message")
	log.Warn("This is Warn Message")
	log.Error("This is Error Message")
	log.Fatal("This is Fatal Message")
}

日志的格式化输出

dlog支持为每个级别的日志提供了一个xxxf、xxxJSON、xxxXML的函数,用于输出不同格式日志:

package main
import log "dlog"
func main()  {
	log.Debugf("This is a %s Message", "Debug")
	log.Infof("This is a %s Message", "Info")
}

输出JSON格式的日志:

package main
import log "dlog"
func main()  {
	type User struct {
		Name 	string
		Age 	int
	}
	user := User{Name:"lisi", Age:12}
	log.DebugJSON(user)
}

输出XML格式的日志:

package main
import log "dlog"
func main()  {
	type User struct {
		Name 	string
		Age 	int
	}
	user := User{Name:"lisi", Age:12}
	log.DebugXML(user)
}

设置JSON/XML的显示格式:

package main
import log "dlog"
func main()  {
	type User struct {
		Name 	string
		Age 	int
	}
	user := User{Name:"lisi", Age:12}
    log.ShowIndent(true)
	log.DebugJSON(user)
}

使用Output输出日志

log.Output函数可以指定任意日志前缀输出日志:

package main
import log "dlog"
func main()  {
	log.Output("[SQL]", "This is SQL Message")
	log.Output("[DEBUG]", "This is Debug Message")
}

输出日志到文件

FileLogger是dlog提供的一种将日志输出到文件的日志类型。使用FileLogger日志类型前需要对FileLogger进行初始化,为FileLogger指定日志文件的存放目录以及日志文件的轮换方式。 日志文件可以按照天(log.ROTATE_DAY)或小时(log.ROTATE_HOUR)进行进行轮换。

package main
import log "dlog"
func main()  {
	log.InitFileLogger("./logs", log.LOG_DEBUG)
	defer log.Close()

	log.Debug("This is a Debug Message")
	log.Info("This is a Debug Info")
}

dlog为了提高日志组件的性能,采用了基于buffer的文件输出方式,因此在系统退出前需要调用Close()函数将buffer中的数据刷新到文件中。

关闭源码信息的输出

dlog缺省会在日志中输出源码所在的文件以及源码的行号,若不需要显示源码信息,可以使用函数:ShowCaller(show bool)来关闭源码信息的输出。

package main
import log "dlog"
func main()  {
	log.InitFileLoggerHour("./logs", log.LOG_DEBUG)
    log.ShowCaller(false)
	defer log.Close()

	log.Debug("This is a Debug Message")
	log.Info("This is a Debug Info")
}

性能指标

  1. 显示caller
goos: windows
goarch: amd64
BenchmarkFileLog
BenchmarkFileLog-6              983985		    1079 ns/op			4 allocs/op
  1. 不显示caller
goos: windows
goarch: amd64
BenchmarkFileLogNoCaller
BenchmarkFileLogNoCaller-6       6514368		172.3 ns/op			0 allocs/op

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// permission to:  owner      group      other
	//                 /“`\      /“`\      /“`\
	// octal:            6          6          6
	// binary:         1 1 0      1 1 0      1 1 0
	// what to permit: r w x      r w x      r w x
	// binary         - 1: enabled, 0: disabled
	// what to permit - r: read, w: write, x: execute
	// permission to  - owner: the user that create the file/folder
	//                  group: the users from group that owner is member
	//                  other: all other users
	// DefaultFileMode is the default log file and directory permission.
	DefaultFileMode = os.FileMode(0660)
)

Functions

func Close

func Close()

func Debug

func Debug(v ...interface{})

func DebugJSON

func DebugJSON(v interface{})

func DebugXML

func DebugXML(v interface{})

func Debugf

func Debugf(format string, v ...interface{})

func Error

func Error(v ...interface{})

func ErrorJSON

func ErrorJSON(v interface{})

func ErrorXML

func ErrorXML(v interface{})

func Errorf

func Errorf(format string, v ...interface{})

func Fatal

func Fatal(v ...interface{})

func FatalJSON

func FatalJSON(v interface{})

func FatalXML

func FatalXML(v interface{})

func Fatalf

func Fatalf(format string, v ...interface{})

func Flush added in v0.1.1

func Flush()

func GetDayBegin added in v0.4.6

func GetDayBegin(d time.Time) time.Time

func GetHourBegin added in v0.4.6

func GetHourBegin(d time.Time) time.Time

func IndentedJSONMarshal

func IndentedJSONMarshal(ent interface{}) string

func Info

func Info(v ...interface{})

func InfoJSON

func InfoJSON(v interface{})

func InfoXML

func InfoXML(v interface{})

func Infof

func Infof(format string, v ...interface{})

func JsonMarshal

func JsonMarshal(ent interface{}) string

func Output

func Output(level_str string, msg string)

func OutputNoCaller

func OutputNoCaller(level_str string, msg string)

func SetCallDepth

func SetCallDepth(call_depth int)

func SetLevel

func SetLevel(log_level Level)

func ShowCaller

func ShowCaller(show bool)

func ShowIndent

func ShowIndent(show bool)

func Warn

func Warn(v ...interface{})

func WarnJSON

func WarnJSON(v interface{})

func WarnXML

func WarnXML(v interface{})

func Warnf

func Warnf(format string, v ...interface{})

Types

type BufferWriter

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

func NewBufferWriter

func NewBufferWriter(name string, flag int, perm os.FileMode) (*BufferWriter, error)

func (*BufferWriter) Available

func (b *BufferWriter) Available() int

func (*BufferWriter) Buffered

func (b *BufferWriter) Buffered() int

func (*BufferWriter) Close

func (b *BufferWriter) Close() error

func (*BufferWriter) Flush

func (b *BufferWriter) Flush() error

func (*BufferWriter) Name

func (b *BufferWriter) Name() string

func (*BufferWriter) Reset

func (b *BufferWriter) Reset()

func (*BufferWriter) Size

func (b *BufferWriter) Size() int

func (*BufferWriter) Write

func (b *BufferWriter) Write(data []byte) (nn int, err error)

type FileWriter

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

func NewFileWriter

func NewFileWriter(file_path string, rotate RotateType) *FileWriter

func (*FileWriter) Close

func (fw *FileWriter) Close() error

func (*FileWriter) Flush

func (fw *FileWriter) Flush() error

func (*FileWriter) Write

func (fw *FileWriter) Write(tm time.Time, data []byte)

type Level

type Level int
const (
	LOG_OFF Level = iota
	LOG_FATAL
	LOG_ERROR
	LOG_WARN
	LOG_INFO
	LOG_DEBUG
)

func ParseLogLevel

func ParseLogLevel(val string) Level

func (Level) String

func (lv Level) String() string

type LogBuffer

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

func NewLogBuffer

func NewLogBuffer() *LogBuffer

func NewLogBufferSize

func NewLogBufferSize(size int) *LogBuffer

func (*LogBuffer) Available

func (b *LogBuffer) Available() int

func (*LogBuffer) Buffered

func (b *LogBuffer) Buffered() int

func (*LogBuffer) Extend

func (b *LogBuffer) Extend(size int)

func (*LogBuffer) GetBytes

func (b *LogBuffer) GetBytes() []byte

func (*LogBuffer) Reset

func (b *LogBuffer) Reset()

func (*LogBuffer) Size

func (b *LogBuffer) Size() int

func (*LogBuffer) Write

func (b *LogBuffer) Write(data []byte)

func (*LogBuffer) WriteByte

func (b *LogBuffer) WriteByte(c byte)

func (*LogBuffer) WriteString

func (b *LogBuffer) WriteString(s string)

func (*LogBuffer) WriteTimeString

func (b *LogBuffer) WriteTimeString(t time.Time)

type LogWriter

type LogWriter interface {
	Write(tm time.Time, data []byte)
	Flush() error
	Close() error
}

type Logger

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

func GetLogger

func GetLogger() *Logger

func InitFileLogger

func InitFileLogger(log_path string, log_level Level) *Logger

func InitFileLoggerHour

func InitFileLoggerHour(log_path string, log_level Level) *Logger

func InitTermLogger

func InitTermLogger(log_level Level) *Logger

func NewFileLogger

func NewFileLogger(log_path string, log_level Level) *Logger

func NewFileLoggerHour

func NewFileLoggerHour(log_path string, log_level Level) *Logger

func NewTermLogger

func NewTermLogger(log_level Level) *Logger

func (*Logger) Close

func (l *Logger) Close() error

func (*Logger) Debug

func (lg *Logger) Debug(v ...interface{})

func (*Logger) DebugJSON

func (lg *Logger) DebugJSON(v interface{})

func (*Logger) DebugXML

func (lg *Logger) DebugXML(v interface{})

func (*Logger) Debugf

func (lg *Logger) Debugf(format string, v ...interface{})

func (*Logger) Error

func (lg *Logger) Error(v ...interface{})

func (*Logger) ErrorJSON

func (lg *Logger) ErrorJSON(v interface{})

func (*Logger) ErrorXML

func (lg *Logger) ErrorXML(v interface{})

func (*Logger) Errorf

func (lg *Logger) Errorf(format string, v ...interface{})

func (*Logger) Fatal

func (lg *Logger) Fatal(v ...interface{})

func (*Logger) FatalJSON

func (lg *Logger) FatalJSON(v interface{})

func (*Logger) FatalXML

func (lg *Logger) FatalXML(v interface{})

func (*Logger) Fatalf

func (lg *Logger) Fatalf(format string, v ...interface{})

func (*Logger) Flush

func (l *Logger) Flush() error

func (*Logger) Info

func (lg *Logger) Info(v ...interface{})

func (*Logger) InfoJSON

func (lg *Logger) InfoJSON(v interface{})

func (*Logger) InfoXML

func (lg *Logger) InfoXML(v interface{})

func (*Logger) Infof

func (lg *Logger) Infof(format string, v ...interface{})

func (*Logger) Output

func (lg *Logger) Output(level_str string, msg string)

func (*Logger) OutputNoCaller

func (lg *Logger) OutputNoCaller(level_str string, msg string)

func (*Logger) SetCallDepth

func (l *Logger) SetCallDepth(call_depth int)

func (*Logger) SetLevel

func (l *Logger) SetLevel(lvl Level)

func (*Logger) ShowCaller

func (l *Logger) ShowCaller(show bool)

func (*Logger) ShowIndent

func (l *Logger) ShowIndent(show bool)

func (*Logger) Warn

func (lg *Logger) Warn(v ...interface{})

func (*Logger) WarnJSON

func (lg *Logger) WarnJSON(v interface{})

func (*Logger) WarnXML

func (lg *Logger) WarnXML(v interface{})

func (*Logger) Warnf

func (lg *Logger) Warnf(format string, v ...interface{})

type RotateType

type RotateType int
const (
	ROTATE_DAY RotateType = iota
	ROTATE_HOUR
)

type TermWriter

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

func NewTermWriter

func NewTermWriter() *TermWriter

func (*TermWriter) Close

func (cw *TermWriter) Close() error

func (*TermWriter) Flush

func (cw *TermWriter) Flush() error

func (*TermWriter) Write

func (cw *TermWriter) Write(tm time.Time, data []byte)

Jump to

Keyboard shortcuts

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