在 Debian 上配置 Go(Golang)日志,通常可以从**系统环境、日志库选择、日志文件管理(systemd / logrotate)**几个方面来做。下面给你一套比较实用、常见的方案。
sudo apt update
sudo apt install golang-go
或安装官方版本(推荐):
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
配置环境:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
log(最简单)package main
import (
"log"
"os"
)
func main() {
file, err := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
log.SetOutput(file)
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
log.Println("service started")
}
log/slog(Go 1.21+ 推荐)package main
import (
"log/slog"
"os"
)
func main() {
file, _ := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
logger := slog.New(slog.NewJSONHandler(file, nil))
slog.SetDefault(logger)
slog.Info("service started", "pid", os.Getpid())
}
常用:
zap(Uber,性能最好)logruszerolog示例(zap):
go get go.uber.org/zap
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("started")
推荐:
/var/log/myapp/
创建目录:
sudo mkdir -p /var/log/myapp
sudo chown youruser:youruser /var/log/myapp
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
WorkingDirectory=/opt/myapp
User=myuser
Restart=on-failure
StandardOutput=append:/var/log/myapp/stdout.log
StandardError=append:/var/log/myapp/stderr.log
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
查看日志:
journalctl -u myapp -f
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/myapp
✅ 小型服务
log/slog✅ 高并发服务
zap✅ 容器 / K8s
如果你愿意,可以告诉我:
我可以直接帮你写一套完整配置。