Golang日志库介绍

本文介绍了Golang的标准库Log以及两个流行的第三方库logrus和zap。讨论了日志在开发中的重要性,标准库Log的使用、自定义及优缺点,并详细对比了logrus和zap的特性,包括日志级别、结构化输出和性能。通过示例展示了如何在项目中应用这两个库。
摘要由CSDN通过智能技术生成

前言

为什么需要日志

  • 调试开发
  • 程序运行日志
  • 用户行为日志

不同的目的决定了日志输出的格式、频率。作为开发人员,调试开发阶段打印日志目的是输出尽可能全的信息(如上下文,变量值…),辅助开发测试,因此日志格式要易读,打印频率要高。而在程序运行时,日志格式倾向于结构化(便于分析与搜索),而且为了性能和聚焦于关键信息(如error ),打印频率更偏低。

Go 标准库 Log

使用

我们常使用 Go log 以下三组函数:

  • Print/Printf/Println: 打印日志信息
  • Panic/Panicf/Panicln: 打印日志信息后,以拼装好的字符串为参数调用 Panic
  • Fatal/Fatalf/Fatalln: 打印日志信息后,os.Exit(1) 退出程序

带 f 后缀的是格式化输出,ln 后缀增加换行符,不过在打印日志场景中会自动增加一个换行符,这里 ln 后缀差别不大。Panic 与 Fatal 的区别在于 Panic 可以被捕获。

示例如下:

package main

import "log"

func main() {
   
	log.Println("日志信息1")
	log.Print("日志信息2")
	log.Panicln("日志信息3")
	log.Fatalln("日志信息4") // 运行不到
}
2021/11/09 15:41:34 日志信息1
2021/11/09 15:41:34 日志信息2
2021/11/09 15:41:34 日志信息3
panic: 日志信息3
goroutine 1 [running]:
log.Panicln({
   0xc0000bdf60, 0x0, 0x1015ba5})
        /usr/local/opt/go/libexec/src/log/log.go:368 +0x65
main.main()
        /Users/bytedance/go/src/github.com/he2121/log_test/main.go:8 +0xa8

可以看到日志格式默认是:时间 + msg。为什么是这样,可以改吗?

原理与自定义

func Println(v ...interface{
   }) {
   
   std.Output(2, fmt.Sprintln(v...))
}

可以看到前面的方法都是调用 std对象中 Output 方法。

var std = New(os.Stderr, "", LstdFlags)

func New(out io.Writer, prefix string, flag int) *Logger {
   
	return &Logger{
   out: out, prefix: prefix, flag: flag}
}

type Logger struct {
   
	mu     sync.Mutex // ensures atomic writes; protects the following fields
	prefix string     // prefix on each line to identify the logger (but see Lmsgprefix)
	flag   int        // properties
	out    io.Writer  // destination for output
	buf    []byte     // for accumulating text to write
}

std使用 log.New构造出来,三个参数

  • io.Writer: 任何实现了 Writer接口的结构,日志会写到这个里面
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值