Skip to content

lixianfa/blog4go

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introduction

BLog4go is an efficient logging library written in the Go programming language, providing logging hook, log rotate, filtering and formatting log message.

BLog4go 是高性能日志库。创新地使用“边解析边输出”方法进行日志输出,同时支持回调函数、日志淘汰和配置文件。可以解决高并发,调用日志函数频繁的情境下,日志库造成的性能问题。

Build Status Coverage Status Go Report Card GoDoc

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 logging 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.LevelType, args ...interface{}) {
	fmt.Println(args...)
}

func main() {
	// init a file write using xml config file
	// log.SetBufferSize(0) // close buffer for in time logging when debugging
	err := log.NewWriterFromConfigAsFile("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)
	log.SetHookAsync(true) // hook will be called in async mode

	// 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

Packages

No packages published

Languages

  • Go 100.0%