下面按**“在 Debian 上用 Go 写日志”常见的几种做法给你说明,从简单到生产级**,你可以按需选择。
package main
import (
"log"
"os"
)
func main() {
f, err := os.OpenFile("/var/log/myapp.log",
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer f.Close()
log.SetOutput(f)
log.Println("hello debian log")
}
sudo mkdir -p /var/log/myapp
sudo chown $USER:$USER /var/log/myapp
go run main.go
Debian 10+ 默认用 systemd
log.Println("this is a log")
sudo nano /etc/systemd/system/myapp.service
内容:
[Unit]
Description=My Go App
After=network.target
[Service]
User=youruser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
查看日志:
journalctl -u myapp -f
✅ 优点:自动轮转、权限安全、生产推荐
import "github.com/sirupsen/logrus"
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetOutput(os.Stdout)
log.Info("server started")
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("hello zap")
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/myapp
| 场景 | 推荐方式 |
|---|---|
| 学习 / 小工具 | 标准库 + 文件 |
| 生产服务 | systemd + journalctl |
| 高并发 | zap + systemd |
| 需要文件 | zap/logrus + logrotate |
如果你愿意,可以告诉我:
我可以直接给你一套完整可跑的 Debian + Go 日志方案。