在这一节中,你将通过程序customLogLineNumber.go
来学习如何在日志文件中打印输出日志的代码的行号。这个程序会分两部分展示。第一部分是这样的:
package main
import (
"fmt"
"log"
"os"
)
var LOGFILE = "/tmp/mGo.log"
func main() {
f, err := os.OpenFile(LOGFILE, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
到目前为止,这个程序和前面学习的customLog.go
没有什么差别。
剩下的代码如下所示:
iLog := log.New(f, "customLogLineNumber ", log.LstdFlags)
iLog.SetFlags(log.LstdFlags | log.Lshortfile)
iLog.Println("Hello there!")
iLog.Println("Another log entry!")
}
所有的神奇之处都在iLog.SetFlags(log.LstdFlags | log.Lshortfile)
这一行。在这行中,除了log.LstdFlags
这个选项,还多列一个选项log.Lshortfile
。后一个选项在日志中增加了全部的文件名和打印日志的语句的行号。
执行 customLogLineNumber.go
不会生成什么可见的输出。当然,执行两次这个程序后,日志文件/tmp/mGo.log的
内容就变得像下面这样:
$ go run customLogLineNumber.go
$ cat /tmp/mGo.log
customLogLineNumber 2019/01/10 18:25:14 customLogLineNumber.go:26: Hello there!
customLogLineNumber 2019/01/10 18:25:14 customLogLineNumber.go:27: Another log entry!
$ go run customLogLineNumber.go
$ cat /tmp/mGo.log
customLogLineNumber 2019/01/10 18:25:14 customLogLineNumber.go:26: Hello there!
customLogLineNumber 2019/01/10 18:25:14 customLogLineNumber.go:27: Another log entry!
customLogLineNumber 2019/01/10 18:25:23 customLogLineNumber.go:26: Hello there!
customLogLineNumber 2019/01/10 18:25:23 customLogLineNumber.go:27: Another log entry!
你可以看到,在命令行使用长名字会是日志不易阅读。