在 Debian 系统上导出 Go(Golang)程序的日志,通常取决于日志写在哪里以及你使用什么方式运行程序。下面按常见场景说明。
这是最常见情况,尤其是用 fmt.Println、log.Println 等。
go run main.go > app.log 2>&1
>:标准输出2>&1:错误也写进同一文件nohup go run main.go > app.log 2>&1 &
或编译后:
nohup ./myapp > app.log 2>&1 &
导出完成,日志在 app.log。
如果你在 Debian 上用 systemd 运行 Go 程序:
journalctl -u your-service.service
journalctl -u your-service.service > app.log
journalctl -u your-service.service -f >> app.log
例如:
log.SetOutput(os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644))
直接复制文件即可:
cp app.log /tmp/app_backup.log
log.SetOutput(&lumberjack.Logger{
Filename: "/var/log/myapp.log",
MaxSize: 10,
MaxBackups: 3,
MaxAge: 28,
})
导出:
cp /var/log/myapp.log /tmp/
docker logs container_name > app.log 2>&1
logrotatersyslog / filebeat / loki如果你愿意,可以告诉我:
我可以给你更精确的命令。