你这个问题有点简略,我按几种常见场景给你分别说明,在 Debian + Golang 环境下“日志同步”通常怎么做。
log/syslog(推荐简单方案)Golang 原生支持 syslog:
import (
"log"
"log/syslog"
)
func main() {
logger, err := syslog.New(syslog.LOG_INFO, "myapp")
if err != nil {
log.Fatal(err)
}
logger.Info("hello from golang")
}
Debian 默认有:
rsyslogsystemd-journald日志会出现在:
journalctl -t myapp
# 或
/var/log/syslog
service 文件
[Unit]
Description=My Golang App
[Service]
ExecStart=/opt/myapp/app
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl enable myapp
sudo systemctl start myapp
查看日志:
journalctl -u myapp -f
✅ 这是 Debian 官方推荐方式
rsyncrsync -avz /var/log/myapp/ user@logserver:/logs/myapp/
可加 cron:
*/5 * * * * rsync -az /var/log/myapp/ logserver:/logs/myapp/
Golang 写本地 syslog → rsyslog 转发
/etc/rsyslog.conf
*.* @@logserver:514
或只转发:
:programname, isequal, "myapp" @@logserver:514
示例日志格式:
log.Println(`{"level":"info","msg":"sync test"}`)
用库:
go-kafkaloki-client-go适合大日志量系统
| 你可能的意思 | 正确做法 |
|---|---|
| 多台机器日志一致 | 集中日志服务器 |
| 程序崩溃不丢日志 | systemd + journald |
| 实时看日志 | journalctl -f |
| 文件备份 | rsync |
我可以给你精确方案,比如:
你可以直接说:
“Debian 上 golang 写文件,怎么实时同步到另一台服务器”