发布于2026-07-24 阅读(0)
扫一扫,手机访问
在Debian系统上用Golang写程序,日志记录是个绕不开的基础活儿。但光有日志还不够——怎么从那一堆输出里快速捞出真正有用的信息,才是关键。下面这几个方法,基本上覆盖了从入门到进阶的常见需求。

log 包打底Golang自带的log包虽然功能简单,但胜在开箱即用,不需要额外依赖。通过设置前缀和标志位,就能控制日志输出什么内容。比如加上日期、时间,甚至文件名和行号,调试时特别有用。
package main
import (
"log"
"os"
)
func main() {
log.SetPrefix("INFO: ")
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("This is an info message")
}
这样输出的日志就会带上“2025/03/15 10:30:00 INFO: main.go:12: This is an info message”这类信息,一眼就能看出是由谁在什么时间点生成的。
logrus 或 zap标准库虽然够用,但一旦项目复杂起来,往往需要更精细的控制——比如字段化日志、不同输出格式、性能优化等。这时候第三方库就派上用场了。logrus 和 zap 是社区里用得最多的两个,前者配置灵活,后者性能极致。拿 logrus 举个例子:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logrus.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logrus.Info("This is an info message")
}
输出会带上完整的时间戳,而且格式统一,后续解析也方便。如果对性能有要求,zap 的“零分配”设计更值得考虑。
日志写好了,下一步就是从中提取有价值的信息。最直接的办法是用正则表达式——比如抓取时间戳、日志级别、某个特定字段。下面这段代码演示了如何从日志中提取时间戳:
package main
import (
"fmt"
"log"
"regexp"
)
func main() {
log.SetPrefix("INFO: ")
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("2022/01/01 12:00:00 INFO: This is an info message")
re := regexp.MustCompile(`(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2})`)
matches := re.FindStringSubmatch("2022/01/01 12:00:00 INFO: This is an info message")
if len(matches) > 1 {
fmt.Println("Timestamp:", matches[1])
}
}
输出结果:
Timestamp: 2022/01/01 12:00:00
当然,如果你用的是结构化日志(比如JSON格式),用 go-logfmt 这类解析库会更省事。正则表达式虽然万能,但面对复杂格式时容易出错,所以还是那句话:根据实际场景选最顺手的工具。
总结一下:从标准库到第三方库,再到解析提取,每一步都是在让日志从“能看”变成“好用”。关键是要想清楚自己到底需要从日志里获得什么,然后再决定用什么方案。希望这些方法能帮你少踩几个坑。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8