在 CentOS 上配置 Golang 日志,通常分三种常见场景,我按“从简单到生产”给你讲:
适合开发、调试。
package main
import (
"log"
"os"
)
func main() {
logFile, _ := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(logFile)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("hello centos log")
}
✅ 优点:零依赖
❌ 缺点:无轮转、无级别
log.SetOutput(os.Stdout)
或写文件:
log.SetOutput(logFile)
创建配置文件:
sudo vi /etc/logrotate.d/myapp
内容示例:
/var/log/myapp.log {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
✅ 常用参数说明:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启程序截断日志(Go 常用)测试:
sudo logrotate -d /etc/logrotate.d/myapp
log.SetOutput(os.Stdout)
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=appuser
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
查看日志:
journalctl -u myapp -f
✅ 优点:
logger, _ := zap.NewProduction()
logger.Info("hello")
log.SetFormatter(&log.JSONFormatter{})
log.WithField("module", "auth").Info("login")
| 场景 | 推荐方案 |
|---|---|
| 本地测试 | Go log |
| 服务器程序 | Go log + logrotate |
| 系统服务 | systemd + journalctl |
| 高并发服务 | zap + systemd |
如果你愿意,可以告诉我:
我可以直接帮你写 完整配置 + 示例。