代码拉取完成,页面将自动刷新
logit 是一个基于级别控制的高性能纯结构化日志库,可以应用于所有的 GoLang 应用程序中。
历史版本的特性请查看 HISTORY.md。未来版本的新特性和计划请查看 FUTURE.md。
由于 Go1.21 增加了 slog 日志包,基本确定了 Go 风格的日志 API,所以 logit v1.5.0 版本开始也调整为类似的风格,并且提供更多的功能和更高的性能。
$ go get -u github.com/FishGoddess/logit
package main
import (
"context"
"fmt"
"github.com/FishGoddess/logit"
)
func main() {
// Use default logger to log.
// By default, logs will be output to stdout.
// logit.Default() returns the default logger, but we also provide some common logging functions.
logit.Info("hello from logit", "key", 123)
logit.Default().Info("hello from logit", "key", 123)
// Use a new logger to log.
// By default, logs will be output to stdout.
logger := logit.NewLogger()
logger.Debug("new version of logit", "version", "1.5.0-alpha", "date", 20231122)
logger.Error("new version of logit", "version", "1.5.0-alpha", "date", 20231122)
type user struct {
ID int64 `json:"id"`
Name string `json:"name"`
}
u := user{123456, "fishgoddess"}
logger.Info("user information", "user", u, "pi", 3.14)
// Yep, I know you want to output logs to a file, try WithFile option.
// The path in WithFile is where the log file will be stored.
// Also, it's a good choice to call logger.Close() when program shutdown.
logger = logit.NewLogger(logit.WithFile("./logit.log"))
defer logger.Close()
logger.Info("check where I'm logged", "file", "logit.log")
// What if I want to use default logger and output logs to a file? Try SetDefault.
// It sets a logger to default and you can use it by package functions or Default().
logit.SetDefault(logger)
logit.Warn("this is from default logger", "pi", 3.14, "default", true)
// If you want to change level of logger to info, try WithInfoLevel.
// Other levels is similar to info level.
logger = logit.NewLogger(logit.WithInfoLevel())
logger.Debug("debug logs will be ignored")
logger.Info("info logs can be logged")
// If you want to pass logger by context, use NewContext and FromContext.
ctx := logit.NewContext(context.Background(), logger)
logger = logit.FromContext(ctx)
logger.Info("logger from context", "from", "context")
// Don't want to panic when new a logger? Try NewLoggerGracefully.
logger, err := logit.NewLoggerGracefully(logit.WithFile(""))
if err != nil {
fmt.Println("new logger gracefully failed:", err)
}
}
更多使用案例请查看 _examples 目录。
$ make bench
goos: linux
goarch: amd64
cpu: AMD EPYC 7K62 48-Core Processor
BenchmarkLogitLogger-2 1486184 810 ns/op 0 B/op 0 allocs/op
BenchmarkLogitLoggerTextHandler-2 1000000 1080 ns/op 0 B/op 0 allocs/op
BenchmarkLogitLoggerJsonHandler-2 847864 1393 ns/op 120 B/op 3 allocs/op
BenchmarkLogitLoggerPrint-2 1222302 981 ns/op 48 B/op 1 allocs/op
BenchmarkSlogLoggerTextHandler-2 725522 1629 ns/op 0 B/op 0 allocs/op
BenchmarkSlogLoggerJsonHandler-2 583214 2030 ns/op 120 B/op 3 allocs/op
BenchmarkZeroLogLogger-2 1929276 613 ns/op 0 B/op 0 allocs/op
BenchmarkZapLogger-2 976855 1168 ns/op 216 B/op 2 allocs/op
BenchmarkLogrusLogger-2 231723 4927 ns/op 2080 B/op 32 allocs/op
BenchmarkLogitFile-2 624774 1935 ns/op 0 B/op 0 allocs/op
BenchmarkLogitFileWithBuffer-2 1378076 873 ns/op 0 B/op 0 allocs/op
BenchmarkLogitFileWithBatch-2 1367479 883 ns/op 0 B/op 0 allocs/op
BenchmarkSlogFile-2 407590 2944 ns/op 0 B/op 0 allocs/op
BenchmarkZeroLogFile-2 634375 1810 ns/op 0 B/op 0 allocs/op
BenchmarkZapFile-2 382790 2641 ns/op 216 B/op 2 allocs/op
BenchmarkLogrusFile-2 174944 6491 ns/op 2080 B/op 32 allocs/op
注:WithBuffer 和 WithBatch 分别是使用了缓冲器和批量写入的方式进行测试。
如果您觉得 logit 缺少您需要的功能,请不要犹豫,马上参与进来,发起一个 issue。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。