Debian上Golang日志管理工具与落地方案
一 核心工具与适用场景
二 快速落地方案
三 配置示例
package main
import (
"os"
"github.com/sirupsen/logrus"
)
func main() {
log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetOutput(os.Stdout) // 也可写入文件,交由logrotate管理
log.SetLevel(logrus.InfoLevel)
log.WithFields(logrus.Fields{
"service": "order",
"order_id": 1001,
}).Info("order created")
}
/var/log/myapp/*.log {
daily
rotate 7
missingok
notifempty
compress
create 0644 myapp myapp
}
package main
import (
"go.uber.org/zap"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
// 应用内轮转
lumber := &lumberjack.Logger{
Filename: "/var/log/myapp/app.log",
MaxSize: 10, // MB
MaxBackups: 7,
MaxAge: 28, // days
Compress: true,
}
defer lumber.Close()
sugared := logger.Sugar()
sugared.Infow("user login", "user_id", 42, "ip", "192.168.1.10")
}
# /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
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
查询:journalctl -u myapp -f。四 监控与告警
五 选型与最佳实践