CentOS环境下Golang日志分布式部署实践
一 架构与原则
二 落地步骤
三 关键配置与示例
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"time"
)
func main() {
cfg := zap.NewProductionEncoderConfig()
cfg.TimeKey = "timestamp"
cfg.EncodeTime = zapcore.ISO8601TimeEncoder
logger := zap.New(zapcore.NewCore(
zapcore.NewJSONEncoder(cfg),
zapcore.Lock(os.Stdout),
zap.NewAtomicLevelAt(zap.InfoLevel),
))
defer logger.Sync()
logger.Info("user login",
zap.String("service", "order"),
zap.String("instance", "10.0.1.12:8080"),
zap.String("trace_id", "abc-123-def"),
zap.Int("status", 200))
}
[Unit]
Description=My Go App
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
StandardOutput=journal
StandardError=journal
User=app
Group=app
[Install]
WantedBy=multi-user.target
/var/log/myapp/*.log {
daily
rotate 7
missingok
compress
delaycompress
copytruncate
notifempty
}
systemctl daemon-reload && systemctl enable --now myapp;查看:journalctl -u myapp -f。四 运维与扩展建议