这是一个创建于 1865 天前的主题,其中的信息可能已经有所发展或是发生改变。
现在是有 3 个程序
1.golang 的程序,内部文件流写日志到 /var/log/a.log
filePath = "/var/log/a.log"
wrt = io.MultiWriter(openFile(filePath))
func openFile(filePath string) io.Writer {
f, e := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if e != nil {
log.Fatalf("error opening file: %v", e)
}
return f
}
2.
golang 的程序通过 supervisor 来管理的,supervisor 配置如下
把标准输出流也重定向写入到 a.log 这个文件里面去
stdout_logfile=/var/log/a.log
stderr_logfile=/var/log/a.log
3.
每天零点的时候有个 shell 脚本会去定时切割一下日志,写在 crond 里面的
cp /var/log/a.log /var/log/2019-08-15-a.log
echo "" >/var/log/a.log
现在的问题是,在某一天,发现 /var/log 路径下的日志变成了 2 个文件
/var/log/a.log /var/log/a.log.1
然后 golang 的程序输出日志也全部到 a.log.1 这个文件里面去了
a.log 文件里面变成了空了,shell 脚本切割出来的日志也是空的,
这个情况并不是每天都会发生,是某一天会偶然发生,这是为啥呢?
4 条回复 • 2019-08-16 13:18:38 +08:00
|
|
1
shangsharon 2019-08-16 00:53:55 +08:00 via Android
supervisor 会自动切割日志的,你可以试试让程序输出大量的日志,达到 super..的设置量了就会切割的
|
|
|
4
Buffer2Disk 2019-08-16 13:18:38 +08:00
设置如下就可以让 supervisor 禁止自动切割备份日志了 # no limit on the size stdout_logfile_maxbytes=0 stderr_logfile_maxbytes=0
# no backup with supervisor stdout_logfile_backups=0 stderr_logfile_backups=0
|