下面给你一个在 Debian 上搭建 Golang 日志环境的实用方案,从系统准备到常见日志库与运行方式,适合新手到生产环境参考。
sudo apt update
sudo apt upgrade -y
推荐用官方二进制(版本更新快):
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
配置环境变量(写入 ~/.bashrc 或 /etc/profile):
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
验证:
go version
mkdir ~/go-logger && cd ~/go-logger
go mod init go-logger
log(最简单)适合小型服务
package main
import (
"log"
"os"
)
func main() {
file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(file)
log.SetFlags(log.LstdFlags | log.Lshortfile)
log.Println("服务启动")
}
logrus(结构化日志,推荐)go get github.com/sirupsen/logrus
package main
import (
"os"
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
log.SetOutput(file)
log.SetFormatter(&logrus.JSONFormatter{})
log.WithFields(logrus.Fields{
"module": "main",
}).Info("服务启动")
}
zap(高性能,生产推荐)go get go.uber.org/zap
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("服务启动",
zap.String("env", "debian"),
)
}
logrotate(Debian 原生)创建配置:
sudo nano /etc/logrotate.d/go-logger
示例:
/home/user/go-logger/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/go-logger
创建服务:
sudo nano /etc/systemd/system/go-logger.service
[Unit]
Description=Go Logger Service
After=network.target
[Service]
User=youruser
WorkingDirectory=/home/youruser/go-logger
ExecStart=/home/youruser/go-logger/app
StandardOutput=append:/var/log/go-logger.log
StandardError=append:/var/log/go-logger.err
[Install]
WantedBy=multi-user.target
启用:
sudo systemctl daemon-reload
sudo systemctl enable go-logger
sudo systemctl start go-logger
查看日志:
journalctl -u go-logger -f
Debian
└─ Go
├─ log / logrus / zap
├─ logrotate
└─ systemd
如果你愿意,我可以: