Go语言标准库log包
log
go语言内置的log包实现了简单的日志记录功能,本文主要记录log包的基本使用
使用logger
log包定义了异常格式化输出的方法。可以通过调用Print系列(Print|Printf|Println),Fatal系列(Fatal|Fatalln|Fatalf),Panic系列(Panicf|Panicln|Panic)
使用log包来调用方法,默认会将日志输出到终端。
func main() {
log.Println("这是一条很普通的日志.")
v := "很普通的"
log.Printf("这是一条%s日志 \n", v)
log.Fatalln("这是一条会触发fatal的日志")
// log.Panicln("这是一条会触发panic的日志")
}
直送代码输入结果:
2022/05/02 21:39:37 这是一条很普通的日志.
2022/05/02 21:39:37 这是一条很普通的日志
2022/05/02 21:39:37 这是一条会触发fatal的日志
exit status 1
flag选项
log标准库提供了如下flag的选项,它们是一些列已定义好的常量。
const (
// 控制输出日志信息的细节,不能控制输出的顺序和格式。
// 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 时间:01:23:23
Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位)
Llongfile // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile // 文件名+行号:d.go:23(会覆盖掉Llongfile)
LUTC // 使用UTC时间
LstdFlags = Ldate | Ltime // 标准logger的初始值
)
下面我们在记录日志时设置表中logger的输出选项:
package main
import (
"log"
"os"
)
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
f, err := os.OpenFile("d:/a.log", os.O_RDONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
log.Fatal("打开日志文件失败")
}
log.SetOutput(f)
}
func main() {
log.Println("记录一条普通日志.")
}
执行代码结果:
2022/05/02 21:45:40 main.go:26: 记录一条普通日志.
配置日志前缀
复用以上代码
package main
import (
"log"
"os"
)
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
f, err := os.OpenFile("d:/a.log", os.O_RDONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
log.Fatal("打开日志文件失败")
}
log.SetOutput(f)
}
func main() {
log.SetPrefix("mylogfile")
log.Println("记录一条普通日志.")
}
执行代码结果如下:
[mylogfile]2022/05/02 21:48:57 main.go:27: 记录一条普通日志.
配置日志输出到文件
这里需要使用到SetOutPut函数
func SetOutput(w io.Writer)
SetOutput
函数用来设置标准logger的输出目的地,默认是标准错误输出。
使用表中logger,将文件写入到指定文件中。
package main
import (
"log"
"os"
)
func init() {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
f, err := os.OpenFile("d:/a.log", os.O_RDONLY|os.O_APPEND|os.O_CREATE, 0666)
if err != nil {
log.Fatal("打开日志文件失败")
}
log.SetOutput(f)
}
func main() {
log.Println("记录一条普通日志.")
}
执行代码,结果如下:
2022/05/02 21:52:43 main.go:27: 记录一条普通日志.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码