Files
2018-11-19 10:24:54 +08:00
..
2018-11-19 10:24:54 +08:00
2018-11-19 10:24:54 +08:00
2018-11-19 10:24:54 +08:00
2018-11-19 10:24:54 +08:00

Logd

高性能日志系统每日24时自动打包前一天数据自动删除过期数据30天自动邮件告警。

Bechmark

BenchmarkLogFileChan-8           	  500000	      2265 ns/op
BenchmarkLogFile-8               	  300000	      4393 ns/op
BenchmarkStandardFile-8          	 1000000	      2216 ns/op

BenchmarkLogFileChanMillion-8    	 1000000	      2319 ns/op
BenchmarkLogFileMillion-8        	 1000000	      4397 ns/op
BenchmarkStandardFileMillion-8   	 1000000	      2232 ns/op

Print Level

Ldebug        = 1 << iota //
Linfo                     //
Lwarn                     //
Lerror                    //
Lfatal                    //

logd.Printf()
logd.Print()
logd.Debugf()
logd.Debug()
logd.Infof()
logd.Info()
logd.Warnf()
logd.Warn()
logd.Errorf()
logd.Error()
logd.Fatalf()
logd.Fatal()

5种日志等级12种打印方法完全理解你记录日志的需求。

Ldebug < Linfo < Lwarn < Lerror < Lfatal

通过SetLevel()方法设置logd.SetLevel(Lwarn)系统只会打印大于等于Lwarn的日志。

注意logd.Printf() 和 logd.Print() 不论等级为什么都会输出,请悉知。

Print Option

系统提供多种格式输出选项:

Lasync                    // 异步输出日志
Ldate                     // like 2006/01/02
Ltime                     // like 15:04:05
Lmicroseconds             // like 15:04:05.123123
Llongfile                 // like /a/b/c/d.go:23
Lshortfile                // like d.go:23
LUTC                      // 时间utc输出
Ldaily                    // 按天归档

默认提供:
 LstdFlags // 2006/01/02 15:04:05.123123, /a/b/c/d.go:23

使用方法

1、默认方式

默认方式使用以下配置选项:

// 2006/01/02 15:04:05.123123, /a/b/c/d.go:23
Lall      = Ldebug | Linfo | Lwarn | Lerror | Lfatal
LstdFlags = Lall | Ldate | Lmicroseconds | Lshortfile

这里会打印所有等级日志,打印日志格式为2006/01/02 15:04:05.123123, /a/b/c/d.go:23

可以通过logd.SetLevel(level)方式调整日志等级。logd.SetOutput(writer)输出日志到别的地方。例子:

package main

import (
	"fmt"
	"os"

	"github.com/deepzz0/logd"
)

func main() {
	logd.Printf("Printf: foo\n")
	logd.Print("Print: foo")

	logd.Debugf("Debugf: foo\n")
	logd.Debug("Debug: foo")

	logd.Errorf("Errorf: foo\n")
	logd.Error("Error: foo")

	// 改变输出等级
	logd.SetLevel(logd.Lerror)
	// 不论等级如何都会输出
	fmt.Println("----- 改变日志等级为Lerror -----")
	logd.Printf("Printf: foo\n")
	logd.Print("Print: foo")

	logd.Debugf("Debugf: foo\n")
	logd.Debug("Debug: foo")

	logd.Errorf("Errorf: foo\n")
	logd.Error("Error: foo")

	fmt.Println("----- 日志等级为Lerror并写入到test.log中 -----")
	f, err := os.Create("./test.log")
	if err != nil {
		panic(err)
	}
	defer f.Close()

	logd.SetOutput(f)

	logd.Printf("Printf: foo\n")
	logd.Print("Print: foo")

	logd.Debugf("Debugf: foo\n")
	logd.Debug("Debug: foo")

	logd.Errorf("Errorf: foo\n")
	logd.Error("Error: foo")
}

输出如下: logd_print

1、自定义配置 推荐需要将日志保存下来的用户使用。

Flags := Lwarn | Lerror | Lfatal | Ldate | Ltime | Lshortfile | Ldaily | Lasync

f, _ := os.OpenFile("testdata/onlyfile.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
log := New(LogOption{
	Out:        f,
	Flag:       Flags,
	LogDir:     "testdata",
	ChannelLen: 1000,
})
  • 输出日志等级Lwarn | Lerror | Lfatal
  • 输出日志格式Ldate | Ltime | Lshortfile
  • 按日归档Ldaily
  • 异步输出Lasync

它会将每天的日志,采用 gzip 压缩,并保留 30 天以内的日志。自动删除 30 以前的日志。