BLog4go 高性能日志庫

jopen 9年前發布 | 40K 次閱讀 日志處理 blog4go: Partial Logger

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

CHANGELOG

項目地址: https://github.com/YoungPioneers/blog4go

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!