Ldate | Ltime
,也就是 2009/01/23 01:23:23
Xrintln
、Xrintf
函数 换行、可变参数都是通过 fmt
标准库的方法去实现的Fatal
和 Panic
是通过 os.Exit(1)
、panic(s)
集成实现的。而具体的组装逻辑是通过 Output
方法实现的runtime.Caller
去获取当前 goroutine 所执行的函数文件、行号等调用信息(log 标准库中默认深度为 2)。另外如果结尾不是换行符 \n
,将自动补全一个换行Ldate
、Ltime
、Lmicroseconds
,则对应将日期和时间写入 bufLshortfile
、Llongfile
,则对应将文件和行号信息写入 buflog.Print*
等方法呢?sync.Mutex
进行操作(以此解决原子问题),其余逻辑均为组装日志信息和转换数值格式,该包较为经典,可以多读几遍 😄runtime.Caller
前要先解锁,后再加锁呢?