在 Debian 上用 Go(Golang)写日志,常见做法有三类:标准库 log、第三方日志库(如 zap / logrus),以及配合系统日志(syslog / journald)。下面按使用场景给你一个清晰指南。
logpackage main
import (
"log"
)
func main() {
log.Println("这是一条普通日志")
log.Printf("格式化日志: %d\n", 100)
log.Fatal("致命错误,程序退出")
}
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()
log.SetOutput(file)
log.Println("日志写入文件")
}
⚠️
/var/log/通常需要 root 权限,或用sudo
go get github.com/sirupsen/logrus
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logrus.SetLevel(logrus.DebugLevel)
logrus.Info("info 日志")
logrus.Warn("warn 日志")
logrus.Error("error 日志")
}
输出示例:
INFO[0000] info 日志
WARN[0000] warn 日志
go get go.uber.org/zap
package main
import "go.uber.org/zap"
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("zap 日志",
zap.String("module", "auth"),
zap.Int("code", 200),
)
}
package main
import (
"log"
"log/syslog"
)
func main() {
logger, err := syslog.New(syslog.LOG_INFO, "myapp")
if err != nil {
log.Fatal(err)
}
logger.Info("写入 syslog")
}
查看日志:
sudo tail -f /var/log/syslog
如果你用 systemd 运行 Go 程序:
sudo journalctl -u myapp.service -f
Go 程序只要输出到 stdout / stderr,journald 会自动收集。
# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=www-data
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
journalctl -u myapp -f
| 场景 | 推荐 |
|---|---|
| 简单脚本 | log |
| 小型服务 | logrus |
| 高性能服务 | zap |
| Debian 系统服务 | stdout + journald |
如果你愿意,可以告诉我:
我可以直接帮你写一份完整示例。