在 Debian 系统上使用 Go(Golang)写日志,常见方式有 标准库 log、第三方日志库(如 logrus、zap),以及系统日志(syslog)。下面按使用场景给你介绍几种常见写法。
log(最简单)package main
import (
"log"
)
func main() {
log.Println("这是一条日志")
log.Printf("当前值: %d\n", 10)
}
package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("/var/log/myapp.log",
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
logger := log.New(file, "MYAPP: ", log.LstdFlags|log.Lshortfile)
logger.Println("写入日志文件")
}
注意:
/var/log/目录一般需要 root 权限- 普通用户建议用
~/logs/或/tmp/
logrus(结构化日志,推荐)go get github.com/sirupsen/logrus
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetLevel(logrus.InfoLevel)
log.WithFields(logrus.Fields{
"user": "alice",
}).Info("用户登录")
}
file, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(file)
zap(高性能,生产环境推荐)go get go.uber.org/zap
package main
import "go.uber.org/zap"
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("服务启动",
zap.String("host", "debian"),
zap.Int("port", 8080),
)
}
log/syslogpackage main
import (
"log"
"log/syslog"
)
func main() {
logger, err := syslog.New(syslog.LOG_INFO|syslog.LOG_LOCAL0, "myapp")
if err != nil {
log.Fatal(err)
}
logger.Info("写入系统日志")
}
查看日志:
sudo journalctl -t myapp
# 或
sudo tail -f /var/log/syslog
如果你用 systemd 运行 Go 程序:
log.Printlnjournalctl -u myapp.service -f
myapp.service 示例:
[Unit]
Description=My Go App
[Service]
ExecStart=/opt/myapp/myapp
Restart=always
[Install]
WantedBy=multi-user.target
| 场景 | 推荐方式 |
|---|---|
| 学习 / 小工具 | log |
| Web 服务 | logrus |
| 高并发服务 | zap |
| 系统级服务 | syslog + systemd |
如果你能告诉我:
我可以直接给你一套完整示例。