这是我参与「第三届青训营 -后端场」笔记创作的第1篇笔记
log
无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。
使用Logger
Logger 一般是用来记录程序在运行阶段或者调试阶段所遇到的错误,并将错误信息输出到终端或者文件中
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err) // log 记录
}
在第三行中,log 可以使用log.Fatal(err) 来记录第一行在json 序列化时所遇到的错误,将该错误信息输出并退出程序
log 也可以搭配不同的输出形式,如:
err := "这是一个log 信息"
log.Println(err) // 仅输出err 的信息
log.Printf("%v\n", err) // 格式化输出err 的信息
log.Fatalln(err) // 输出err 的信息,并退出程序
log.Panicln(err) // 输出err 的信息,并“抛出一个异常”
output:
2022/05/09 13:03:13 这是一个log 信息
2022/05/09 13:03:13 这是一个log 信息
2022/05/09 13:03:13 这是一个log 信息
配置logger
默认情况下logger 只会提供日志的时间信息(如上),如果我们希望获得更多信息,比如:记录该日志的行数和文件名;我们就可以使用log 标准库中定制这些设置的方法来实现
-
首先了解一下log 标准库flag选项有哪些
const ( Ldate = 1 << iota // 日期:2009/01/23 Ltime // 时间:01:23:23 Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位) Llongfile // 文件全路径名+行号: Lshortfile // 文件名+行号: LUTC // 使用UTC时间 LstdFlags = Ldate | Ltime // 标准logger的初始值 ) -
根据搭配就可配置出简单的输出格式,如:
err := "这是一个log 信息" log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate) log.Println(err) // 仅输出err 的信息 output:2022/05/09 13:08:26.357721 D:/GoCode/logDemo/main.go:3: 这是一个log 信息
配置日志前缀
有时候我们希望在日志信息中加一个前缀,方便后期的检索与处理,就可以使用如下配置方案:
func Prefix() string // 前缀默认为空
func SetPrefix(prefix string) // 在日志信息前加上[prefix] 字段信息
output:[prefix] xxx(日志信息)
配置日志输出位置
有时候我们不希望在控制台输出日志信息,可以使用SetOutput 函数来设置文件输出的位置:
logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) // 同目录下xx.log 文件
if err != nil {
fmt.Println("open log file failed, err:", err)
return
}
err := "这是一个log 信息"
log.SetOutput(logFile)
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
log.Println(err)
总结
以上的配置信息都可以写在init 函数中,方便我们的使用
func init() {
logFile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("open log file failed, err:", err)
return
}
log.SetOutput(logFile)
log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
}
in ./xx.log 信息
[zack]2022/05/09 14:00:23.135978 D:/GoCode/logDemo/02配置logger/main.go:13: 这是一条很普通的日志。
[zack]2022/05/09 14:00:23.136978 D:/GoCode/logDemo/02配置logger/main.go:25: 这是一条很普通的日志。
[zack]2022/05/09 14:00:23.136978 D:/GoCode/logDemo/02配置logger/main.go:27: 这是一条很普通的日志。