在 Debian 系统上,“导出 Golang 日志”通常有几种常见场景。下面按最常用方式给你说明,你可以根据实际需求选择。
如果你的 Golang 程序使用了标准库或第三方日志库(如 log、zap、logrus),直接把日志输出到文件即可。
package main
import (
"log"
"os"
)
func main() {
f, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
log.Fatal(err)
}
defer f.Close()
log.SetOutput(f)
log.Println("hello debian log")
}
然后:
sudo systemctl restart myapp
cat /var/log/myapp.log
如果 Golang 程序是作为 systemd 服务 运行的(Debian 默认),日志通常由 journald 管理。
sudo journalctl -u your-service-name
sudo journalctl -u your-service-name -f
sudo journalctl -u your-service-name > golang.log
sudo journalctl -u your-service-name --since "2024-01-01" --until "2024-01-31" > golang.log
Golang 程序什么都不用改,直接打印:
fmt.Println("running...")
systemd 会自动捕获并写入 journal。
示例 service 文件:
[Unit]
Description=Golang App
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
如果你希望日志进入 /var/log/ 并由系统统一管理:
sudo vim /etc/rsyslog.d/30-myapp.conf
内容:
if $programname == 'myapp' then /var/log/myapp.log
& stop
sudo systemctl restart rsyslog
如果是 Docker 容器:
docker logs container_name > golang.log
zap / logrus + 文件切割(如 lumberjack)如果你能补充:
我可以给你更精确的方案。