bilog

package module
v0.3.4 Latest Latest
Warning

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

Go to latest
Published: Jan 15, 2023 License: MIT Imports: 8 Imported by: 12

README

Bilog Go Report Card GitHub GitHub codecov Go Doc

bilog被设计为可以在需要性能,简单日志的场景下可以替换std log,它关注性能与轻量的实现。

Install

go get github.com/zbh255/bilog

Quick-Start

下面的所有示例代码都可在本repoexample文件夹中找到

Print-Time
func main() {
	logger := bilog.NewLogger(os.Stdout, bilog.PANIC)
	logger.Debug("hello world")
	logger.Trace("hello world!")
	logger.Flush()
}

OutPut

[DEBUG] 2022-01-24 12:53:29 hello world
[TRACE] 2022-01-24 12:53:29 hello world!
Print-Caller
func main() {
	logger := bilog.NewLogger(os.Stdout,bilog.PANIC,bilog.WithDefault(),bilog.WithCaller(0))
	logger.Trace("hello world!")
	logger.Debug("hello world!")
	logger.Flush()
}

OutPut

[TRACE] 2022-05-07 23:57:27 /Users/harder/Desktop/Git-Repo/github.com/zbh255/bilog/example/basic/caller/main.go:10 hello world!
[DEBUG] 2022-05-07 23:57:27 /Users/harder/Desktop/Git-Repo/github.com/zbh255/bilog/example/basic/caller/main.go:11 hello world!
No-Buffer

bilog默认使用双重缓冲区来缓冲需要打印的bytes,您可以像上面的例子那样使用Flush强制刷新Buffer,也可以禁用缓冲,如下所示。

func main() {
	logger := bilog.NewLogger(os.Stdout,bilog.PANIC,bilog.WithDefault(),
		bilog.WithLowBuffer(0),bilog.WithTopBuffer(0))
	logger.Trace("hello world!")
	logger.Info("hello world!")
}

OutPut

[TRACE] 2022-05-08 00:35:34  hello world!
[INFO] 2022-05-08 00:35:34  hello world!

事实上,您可以禁用缓冲也可以自行调节缓冲区的大小,使用跟如上示例一样的Api

Benchmark

Cpu: i7-8705G 4C/8T 的测试结果,测试用例在log_test.go

goos: darwin
goarch: amd64
pkg: github.com/zbh255/bilog/benchmark
cpu: Intel(R) Core(TM) i7-8705G CPU @ 3.10GHz
BenchmarkNoConcurrent
BenchmarkNoConcurrent/Bilog-Buffer-1000
BenchmarkNoConcurrent/Bilog-Buffer-1000-8         	   30687	     38321 ns/op	       0 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-Buffer-10000
BenchmarkNoConcurrent/Bilog-Buffer-10000-8        	    3160	    371820 ns/op	       1 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-Buffer-100000
BenchmarkNoConcurrent/Bilog-Buffer-100000-8       	     328	   3586913 ns/op	      17 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-Buffer-1000000
BenchmarkNoConcurrent/Bilog-Buffer-1000000-8      	      32	  35836612 ns/op	     173 B/op	       6 allocs/op
BenchmarkNoConcurrent/Bilog-NoBuffer-1000
BenchmarkNoConcurrent/Bilog-NoBuffer-1000-8       	   37311	     31553 ns/op	       0 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-NoBuffer-10000
BenchmarkNoConcurrent/Bilog-NoBuffer-10000-8      	    3680	    317317 ns/op	       1 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-NoBuffer-100000
BenchmarkNoConcurrent/Bilog-NoBuffer-100000-8     	     376	   3170883 ns/op	      15 B/op	       0 allocs/op
BenchmarkNoConcurrent/Bilog-NoBuffer-1000000
BenchmarkNoConcurrent/Bilog-NoBuffer-1000000-8    	      34	  31894623 ns/op	     156 B/op	       5 allocs/op
BenchmarkNoConcurrent/Stdlog-NoBuffer-1000
BenchmarkNoConcurrent/Stdlog-NoBuffer-1000-8      	    3900	    287960 ns/op	   16007 B/op	    1000 allocs/op
BenchmarkNoConcurrent/Stdlog-NoBuffer-10000
BenchmarkNoConcurrent/Stdlog-NoBuffer-10000-8     	     382	   2857697 ns/op	  160069 B/op	   10000 allocs/op
BenchmarkNoConcurrent/Stdlog-NoBuffer-100000
BenchmarkNoConcurrent/Stdlog-NoBuffer-100000-8    	      40	  28701547 ns/op	 1600674 B/op	  100007 allocs/op
BenchmarkNoConcurrent/Stdlog-NoBuffer-1000000
BenchmarkNoConcurrent/Stdlog-NoBuffer-1000000-8   	       4	 286931206 ns/op	16006676 B/op	 1000070 allocs/op
BenchmarkConcurrent
BenchmarkConcurrent/Bilog-Buffer-1000
BenchmarkConcurrent/Bilog-Buffer-1000-8           	    3792	    323843 ns/op	   24203 B/op	    1002 allocs/op
BenchmarkConcurrent/Bilog-Buffer-10000
BenchmarkConcurrent/Bilog-Buffer-10000-8          	     458	   2735214 ns/op	  249576 B/op	   10094 allocs/op
BenchmarkConcurrent/Bilog-Buffer-100000
BenchmarkConcurrent/Bilog-Buffer-100000-8         	      42	  28385323 ns/op	 2661977 B/op	  101717 allocs/op
BenchmarkConcurrent/Bilog-Buffer-1000000
BenchmarkConcurrent/Bilog-Buffer-1000000-8        	       4	 279774264 ns/op	25004370 B/op	 1008890 allocs/op
BenchmarkConcurrent/Bilog-NoBuffer-1000
BenchmarkConcurrent/Bilog-NoBuffer-1000-8         	    4624	    286396 ns/op	   24065 B/op	    1001 allocs/op
BenchmarkConcurrent/Bilog-NoBuffer-10000
BenchmarkConcurrent/Bilog-NoBuffer-10000-8        	     494	   2411639 ns/op	  242474 B/op	   10026 allocs/op
BenchmarkConcurrent/Bilog-NoBuffer-100000
BenchmarkConcurrent/Bilog-NoBuffer-100000-8       	      54	  23822805 ns/op	 2461564 B/op	  100645 allocs/op
BenchmarkConcurrent/Bilog-NoBuffer-1000000
BenchmarkConcurrent/Bilog-NoBuffer-1000000-8      	       5	 233709438 ns/op	24369846 B/op	 1003884 allocs/op
BenchmarkConcurrent/Stdlog-NoBuffer-1000
BenchmarkConcurrent/Stdlog-NoBuffer-1000-8        	     429	   2856284 ns/op	   40511 B/op	    2006 allocs/op
BenchmarkConcurrent/Stdlog-NoBuffer-10000
BenchmarkConcurrent/Stdlog-NoBuffer-10000-8       	      38	  27950113 ns/op	  439271 B/op	   20407 allocs/op
BenchmarkConcurrent/Stdlog-NoBuffer-100000
BenchmarkConcurrent/Stdlog-NoBuffer-100000-8      	       4	 262928956 ns/op	 6094424 B/op	  221852 allocs/op
BenchmarkConcurrent/Stdlog-NoBuffer-1000000
BenchmarkConcurrent/Stdlog-NoBuffer-1000000-8     	       1	3148452471 ns/op	420471352 B/op	 3423558 allocs/op
PASS

Lisence

The Bilog Use Mit licensed. More is See Lisence

Documentation

Index

Constants

View Source
const (
	INFO level = iota
	DEBUG
	TRACE
	ERROR
	PANIC
)
View Source
const (
	DEFAULT_TOP_BUFFER_SIZE = 256
	DEFAULT_LOW_BUFFER_SIZE = DEFAULT_TOP_BUFFER_SIZE * 6
	TIME_BUF_SIZE           = 64
	CALLER_BUF_SIZE         = 64
)

Variables

This section is empty.

Functions

func Caller added in v0.2.0

func Caller(callDepth int) (file string, line int)

Caller 输出调用函数的文件名和行号

func CallerOfCache added in v0.2.5

func CallerOfCache(skip int) (file string, line int)

func CallerOfConcurrentCache added in v0.2.5

func CallerOfConcurrentCache(skip int) (file string, line int)

Types

type Logger

type Logger interface {
	Level() int
	Info(s string)
	Debug(s string)
	Trace(s string)
	ErrorFromErr(e error)
	ErrorFromString(s string)
	PanicFromErr(e error)
	PanicFromString(s string)
	Flush()
}

type SimpleLogger

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

SimpleLogger atomic flag 会有公平性的问题

func NewLogger

func NewLogger(write io.Writer, l level, options ...options) *SimpleLogger

func (*SimpleLogger) Debug

func (l *SimpleLogger) Debug(s string)

func (*SimpleLogger) ErrorFromErr

func (l *SimpleLogger) ErrorFromErr(e error)

func (*SimpleLogger) ErrorFromString

func (l *SimpleLogger) ErrorFromString(s string)

func (*SimpleLogger) Flush

func (l *SimpleLogger) Flush()

func (*SimpleLogger) Info

func (l *SimpleLogger) Info(s string)

func (*SimpleLogger) Level

func (l *SimpleLogger) Level() int

func (*SimpleLogger) PanicFromErr

func (l *SimpleLogger) PanicFromErr(e error)

func (*SimpleLogger) PanicFromString

func (l *SimpleLogger) PanicFromString(s string)

func (*SimpleLogger) Trace

func (l *SimpleLogger) Trace(s string)

type TimeFactory

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

func NewTimeFactory

func NewTimeFactory() *TimeFactory

func (*TimeFactory) Get

func (t *TimeFactory) Get() []byte

func (*TimeFactory) Start

func (t *TimeFactory) Start()

func (*TimeFactory) TimeStamp added in v0.2.5

func (t *TimeFactory) TimeStamp() int64

type WithFunc added in v0.2.0

type WithFunc func(options *loggerConfig)

func WithCaller added in v0.2.0

func WithCaller(offSet int) WithFunc

WithCaller 指定是否输出源代码文件/行号信息, offSet指定在默认输出深度上的偏移值 有默认值是因为bilog内部在调用runtime.Callers时也有一定深度的封装, 这导致需要调整寻找的栈深度

func WithDefault added in v0.2.0

func WithDefault() WithFunc

func WithLowBuffer added in v0.2.5

func WithLowBuffer(nTopBuffer int8) WithFunc

WithLowBuffer 大小可已设置为 N * DEFAULT_TOP_BUFFER_SIZE nTopBuffer == N

func WithTimes added in v0.2.0

func WithTimes() WithFunc

func WithTopBuffer added in v0.2.5

func WithTopBuffer(lowBufferSize int32) WithFunc

WithTopBuffer 原来的pow语义不够清晰,设置0-Buffer时无法提供一个清晰的语义 所以将其改成直接设置Top-Buffer的大小

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

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