Go内置log库
Go语言内置的log库提供的API很简洁:
Default
方法返回内置的标准Logger
:无prefix,日志写到os.Stderr
New
方法用于自定义Logger
,该方法的函数签名是func New(out io.Writer, prefix string, flag int) *Logger
。可见只要是实现了io.Writer
的,都可以作为日志写入的对象,如标准输出,标准错误,/dev/null
等。这也暗合Linux“一切即文件”的思想。Logger
结构体,包括内置的标准Logger
,提供了一系列写日志和设置日志属性的API,包括Print[f|ln]
,Fatal[f|ln]
,Panic[f|ln]
,SetOutput
,SetFlags
,SetPrefix
等。Logger
结构体中含有互斥锁sync.Mutex
,用于保证写日志是并发安全的。换句话说,可以在多个goroutine中同时使用Logger
来写日志。查看源码可知,Output
方法和SetXxx
方法都有用到这个互斥锁。
想法:
- 内置的log库并没有level(DEBUG/WARN/ERROR)的概念,这点和python的log库不一样
- log库对日志格式的控制是通过flags完成的,可定制化不多
- 使用互斥锁可能会造成大量写日志时效率不高,这或许是产生许多第三方日志库的原因之一
参考:
Comments