BLog4go 高性能日志庫
Introduction
BLog4go is an efficient logging library written in the Go programming language, providing logging hook, log rotate, filtering and formatting log message.
BLog4go 是高性能日志庫。創新地使用“邊解析邊輸出”方法進行日志輸出,同時支持回調函數、日志淘汰和配置文件。可以解決高并發,調用日志函數頻繁的情境下,日志庫造成的性能問題。
Features
- Partially write to the bufio.Writer as soon as posible while formatting message to improve performance
- Support different logging output file for different logging level
- Support configure with files in xml format
- Configurable logrotate strategy
- Call user defined hook in asynchronous mode for every logging action
- Adjustable message formatting
- Configurable logging behavier when looging on the fly without restarting
- Suit configuration to the environment when logging start
- Try best to get every done in background
- File writer can be configured according to given config file
- Different output writers
- Console writer
- File writer
- Socket writer
Quick-start
package main
import (
log "github.com/YoungPioneers/blog4go"
"fmt"
"os"
)
// optionally set user defined hook for logging
type MyHook struct {
something string
}
// when log-level exceed level, call the hook
// level is the level associate with that logging action.
// message is the formatted string already written.
func (self *MyHook) Fire(level log.Level, message string) {
fmt.Println(message)
}
func main() {
// init a file write using xml config file
err := log.NewFileWriterFromConfigAsFile("config.xml")
if nil != err {
fmt.Println(err.Error())
os.Exit(1)
}
defer log.Close()
// initialize your hook instance
hook := new(MyHook)
log.SetHook(hook) // writersFromConfig can be replaced with writers
log.SetHookLevel(log.INFO)
// optionally set output colored
log.SetColored(true)
log.Debugf("Good morning, %s", "eddie")
log.Warn("It's time to have breakfast")
} config.xml
<blog4go minlevel="info">
<filter levels="trace">
<rotatefile path="trace.log" type="time"></rotatefile>
</filter>
<filter levels="debug,info" colored="true">
<file path="debug.log"></file>
</filter>
<filter levels="error,critical">
<rotatefile path="error.log" type="size" rotateSize="50000000" rotateLines="8000000"></rotatefile>
</filter>
</blog4go>Installation
If you don't have the Go development environment installed, visit the Getting Started document and follow the instructions. Once you're ready, execute the following command:
go get -u github.com/YoungPioneers/blog4go
Benchmark
I do some benchmark on a HDD disk comparing amoung fmt,blog4go,seelog,logrus. Benchmark Code
BenchmarkBlog4goSingleGoroutine-4 1000000 1087 ns/op BenchmarkBlog4goMultiGoroutine-4 30000 56569 ns/op BenchmarkFmtFormatSingleGoroutine-4 300000 5104 ns/op BenchmarkFmtFormatWithTimecacheSingleGoroutine-4 300000 4256 ns/op BenchmarkFmtFormatWithTimecacheMultiGoroutine-4 3000 509579 ns/op BenchmarkLogrusSingleGoroutine-4 100000 13757 ns/op BenchmarkLogrusWithTimecacheSingleGoroutine-4 100000 12752 ns/op BenchmarkLogrusWithTimecacheMultiGoroutine-4 1000 2049809 ns/op BenchmarkSeelogSingleGoroutine-4 50000 32846 ns/op BenchmarkSeelogMultiGoroutine-4 1000 3191334 ns/op
It shows that blog4go can write log very fast, especially in situation with multi goroutines running at the same time~
Documentation
TODO
Examples
Full examples please view EXAMPLES
Changelog
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!