在 Debian 上配置 Golang 日志,通常取决于你使用的是 标准库 log、第三方日志库(如 logrus、zap、zerolog),还是 系统级日志(syslog/journald)。下面按常见场景给你一个完整说明。
logpackage main
import (
"log"
"os"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("hello debian")
}
f, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
panic(err)
}
defer f.Close()
log.SetOutput(f)
log.Println("log to file")
⚠️ Debian 注意:
/var/log/ 需要 root 权限/var/log/myapp/如果你用 systemd 管理服务,这是最推荐的方式。
log.SetOutput(os.Stdout)
# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
journalctl -u myapp.service -f
✅ 优点:
Debian 默认可能使用 rsyslog:
sudo apt install rsyslog
sudo systemctl enable rsyslog
import (
"log"
"log/syslog"
)
func main() {
logger, err := syslog.New(syslog.LOG_INFO|syslog.LOG_DAEMON, "myapp")
if err != nil {
panic(err)
}
log.SetOutput(logger)
log.Println("hello syslog")
}
tail -f /var/log/syslog
import (
"github.com/sirupsen/logrus"
"os"
)
func main() {
log := logrus.New()
log.SetOutput(os.Stdout)
log.SetFormatter(&logrus.JSONFormatter{})
log.WithFields(logrus.Fields{
"module": "main",
}).Info("hello logrus")
}
import "go.uber.org/zap"
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("hello zap",
zap.String("env", "debian"),
)
}
logrotatesudo apt install logrotate
示例配置:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
}
| 场景 | 推荐方案 |
|---|---|
| systemd 服务 | stdout + journald |
| 传统服务器 | log + 文件 + logrotate |
| 高并发服务 | zap / zerolog |
| 简单脚本 | 标准库 log |
如果你愿意,可以告诉我:
我可以帮你给出 完整可运行的 Debian + Go 日志配置示例。