klog

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Feb 20, 2022 License: Apache-2.0, Apache-2.0 Imports: 15 Imported by: 0

README

klog

介绍

klog用GO语言实现的一个高性能的结构化日志包,klog用于统计型日志的生成、写文件、以及通过网络向日志服务器发送日志。主要特征 1)klog支持按照天或小时进行日志文件的滚动输出。 2)采用基于buffer的文件输出方式,满足高性能输出日志。 3)klog支持向日志服务器发送日志,采用异步发送方式,可允许长时间断网。

安装

go get github.com/haming123/wego/klog

快速上手
package main
import "klog"
func main() {
	klog.InitKlog("./logs", klog.ROTATE_DAY);
	defer klog.Close()

	klog.NewL("login").UserId("user_1").Add("login_type", "weixin").Output()
	klog.NewL("index").Client("127.0.0.1:666").Add("exe", 12).Output()
}
//输出内容为:
//ctm=2021/12/02 11:44:02 `class=login `userid=user_1 `login_type=weixin `T 
//ctm=2021/12/02 11:44:02 `class=index `client=127.0.0.1:666 `exe=12 `F 
日志格式以及常用字段

日志格式采用key=value的格式,字段之间采用" "来分隔,日志行之间采用" \n" 来分隔,例如 k1=v1 k2=v2 ...... \n k1=v1 k2=v2 ...... \n 若字段的内容有""符号,则编码为"`", 同样若字段的内容有"\n"符号,则编码为"\n". klog在输出日志是自动添加了日志的创建时间ctm,例如: ctm=2021/12/02 11:44:02 class=login userid=user_1 login_type=weixin T klog设置了一下常用的字段:

  1. class(ClassName):日志类型,必填字段,相当于与数据库的表明
  2. func(FuncName):可选字段,通常为功能或页面的名称
  3. client(Client):可选字段,客户端的IP
  4. userid(UserId):可选字段,用户ID
代码的执行时间

klog支持在日志中输出代码的执行时间:

package main
import (
	"klog"
	"time"
)
func main() {
	var klog = klog.NewKlog("./logs", klog.ROTATE_DAY)
	defer klog.Close()
	bet_time := time.Now()

	//代码逻辑开始
	//...
	//代码逻辑结束

	klog.NewL("class_name").BeginTime(bet_time).UserId("user_name").Output()
}

输出内容为: ctm=2021/12/02 12:32:29 class=class_name userid=user_name etm=2 F 其中etm便是代码的执行时间(单位:毫秒)

性能指标
goos: windows
goarch: amd64
pkg: klog4go
BenchmarkWriteLog
BenchmarkWriteLog-6      1223031		991.0 ns/op			5 allocs/op

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Close

func Close()

func GetHostIP

func GetHostIP() string

func GetLineEncodeFlag

func GetLineEncodeFlag(data []byte) bool

func GetLocalIP

func GetLocalIP() string

func GetRemoteIp

func GetRemoteIp(req *http.Request) string

func GetTimeString

func GetTimeString(tm time.Time) string

func HttpGet

func HttpGet(url string) (string, error)

func HttpPost

func HttpPost(url string, data interface{}, contentType string) (string, error)

func LineFieldDecode

func LineFieldDecode(data []byte) []byte

func LogLineDecode

func LogLineDecode(data []byte) map[string]string

func SetDebugLogLevel

func SetDebugLogLevel(l Level)

func SetLogSender

func SetLogSender(sender LogSender) error

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 Config4Wego

type Config4Wego struct {
	HttpAddr string
	AccId    string
	AppId    string
	HostIp   string
	HostPort int
}

type FilePos

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

func (*FilePos) GetFileCode

func (fpos *FilePos) GetFileCode() string

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 Klog

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

func GetKlog

func GetKlog() *Klog

func InitKlog

func InitKlog(lpath string, rtype RotateType) *Klog

func NewKlog

func NewKlog(lpath string, rtype RotateType) *Klog

func (*Klog) Close

func (m *Klog) Close() error

func (*Klog) Flush

func (m *Klog) Flush() error

func (*Klog) GenCurLogFile

func (m *Klog) GenCurLogFile() string

func (*Klog) GetCurLogFile

func (m *Klog) GetCurLogFile() string

func (*Klog) NewL

func (m *Klog) NewL(class_name string) *LogLine

func (*Klog) Output

func (m *Klog) Output(line *LogLine)

func (*Klog) SetLogSender

func (m *Klog) SetLogSender(sender LogSender) error

type Level

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

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 LogFeild

type LogFeild struct {
	Field string
	Value interface{}
}

type LogInfo

type LogInfo struct {
	AccId  string `json:"acc_id"`
	AppId  string `json:"app_id"`
	CHost  string `json:"host_ip"`
	CPort  int    `json:"host_port"`
	FCode  string `json:"file_code"`
	FSize  int64  `json:"file_size"`
	Status bool   `json:"status"`
	Data   []byte `json:"data"`
}

func (*LogInfo) GetFileName

func (info *LogInfo) GetFileName() string

func (*LogInfo) GetFilePath

func (info *LogInfo) GetFilePath(file_path string) string

func (*LogInfo) String

func (info *LogInfo) String() string

type LogLine

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

func NewL

func NewL(class_name string) *LogLine

func (*LogLine) Add

func (line *LogLine) Add(fld string, val interface{}) *LogLine

func (*LogLine) Begin

func (line *LogLine) Begin() *LogLine

func (*LogLine) BeginTime

func (line *LogLine) BeginTime(btime time.Time) *LogLine

func (*LogLine) ClassName

func (line *LogLine) ClassName(val string) *LogLine

func (*LogLine) Client

func (line *LogLine) Client(val string) *LogLine

func (*LogLine) Encode

func (line *LogLine) Encode(pbuf *LogBuffer)

func (*LogLine) FuncName

func (line *LogLine) FuncName(val string) *LogLine

func (*LogLine) Output

func (line *LogLine) Output()

func (*LogLine) Reset

func (line *LogLine) Reset()

func (*LogLine) UserId

func (line *LogLine) UserId(val string) *LogLine

func (*LogLine) WriteEncodeString

func (line *LogLine) WriteEncodeString(pbuf *LogBuffer, data string)

func (*LogLine) WriteLogFieldSpliter

func (line *LogLine) WriteLogFieldSpliter(pbuf *LogBuffer)

func (*LogLine) WriteLogLineSpliter

func (line *LogLine) WriteLogLineSpliter(pbuf *LogBuffer)

type LogSender

type LogSender interface {
	SetLogger(logger *Klog)
	BeginSendLoop()
}

type Reader

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

func NewReader

func NewReader() *Reader

func NewReaderSize

func NewReaderSize(size int) *Reader

func (*Reader) Buffered

func (b *Reader) Buffered() int

func (*Reader) GetBytes

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

func (*Reader) Read

func (b *Reader) Read(p []byte) (int, error)

func (*Reader) ReadFromFile

func (b *Reader) ReadFromFile(rd io.Reader)

func (*Reader) Reset

func (b *Reader) Reset()

type RotateType

type RotateType int
const (
	ROTATE_DAY RotateType = iota
	ROTATE_HOUR
)

type Sender4Wego

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

func NewSender4Wego

func NewSender4Wego(log_srv string, accid string, appid string, local_ip string, port int) *Sender4Wego

func (*Sender4Wego) BeginSendLoop

func (sender *Sender4Wego) BeginSendLoop()

func (*Sender4Wego) CloseFile

func (sender *Sender4Wego) CloseFile()

关闭当前日志文件 需要重置read buffer

func (*Sender4Wego) GetConfig

func (sender *Sender4Wego) GetConfig() *Config4Wego

func (*Sender4Wego) GetDataNodeAddr

func (sender *Sender4Wego) GetDataNodeAddr(url_old string) (string, error)

向服务器获取数据服务器地址

func (*Sender4Wego) GetNewFile

func (sender *Sender4Wego) GetNewFile() string

关闭当前日志文件,并获取新的日志文件名称 清空数据服务器地址,用于重新选择一个服务器

func (*Sender4Wego) GetSendInfo

func (sender *Sender4Wego) GetSendInfo() (FilePos, error)

获取数据服务器的日志文件信息 服务器返回日志编码,以及文件的大小

func (*Sender4Wego) IsWritingFile

func (sender *Sender4Wego) IsWritingFile() bool

当前发送的文件是否是在写日志文件

func (*Sender4Wego) SendData

func (sender *Sender4Wego) SendData() error

发送数据

func (*Sender4Wego) SendFileEnd

func (sender *Sender4Wego) SendFileEnd(fpos *FilePos) error

发送文件结束标志

func (*Sender4Wego) SetLogger

func (sender *Sender4Wego) SetLogger(logger *Klog)

type SimpleLogger

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

func NewSimpleLogger

func NewSimpleLogger() *SimpleLogger

func (*SimpleLogger) Debug

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

func (*SimpleLogger) Debugf

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

func (*SimpleLogger) Error

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

func (*SimpleLogger) Errorf

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

func (*SimpleLogger) Fatal

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

func (*SimpleLogger) Fatalf

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

func (*SimpleLogger) Info

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

func (*SimpleLogger) Infof

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

func (*SimpleLogger) Output

func (lg *SimpleLogger) Output(level_str string, msg string) error

func (*SimpleLogger) SetLevel

func (lg *SimpleLogger) SetLevel(l Level)

func (*SimpleLogger) Warn

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

func (*SimpleLogger) Warnf

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

Jump to

Keyboard shortcuts

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