Golang Go语言中 beego 日志文件被删除后,怎么自动创建一个?
Golang Go语言中 beego 日志文件被删除后,怎么自动创建一个?
RT ,beego 开发的 api 服务,上线后第二天发现日志没有记录下来。
排查了一番,确定是 每天的日志打包脚本会把日志给 mv 走,然后 beego 不会重新创建日志文件, 来问下大佬有啥好的解决方案。
当前的方案是打算,自己在程序里面写定时任务,在日志打包完之后重启程序。
日志脚本打包脚本里面 cp log,然后清空日志文件
更多关于Golang Go语言中 beego 日志文件被删除后,怎么自动创建一个?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
打包脚本移走日志后给你的 service 发一个 signal (比如 kill -USR1 cat /var/run/web.pid
), service 监听这个 signal, 重新创建日志文件. logrotate 处理 nginx 日志就是这样
因为线上还有大量以前的项目,所以主管希望在尽量不改动日志处理脚本的情况下解决这个问题。
当前看来,是没啥更好的方案了
再写一个脚本,定时扫描指定目录是否有日志文件,没有就创建(
这个方案也不行,beego 日志是读取了文件的句柄,并且删除日志文件后 不会判断文件是否还存在。
现在的处理方案是 在 beego 里面自己启动定时任务,如果日志文件没有了,重新对日志配置进行初始化
在 Go 语言中使用 Beego 框架时,如果日志文件被意外删除,Beego 默认不会自动重新创建日志文件。不过,你可以通过一些方法来实现日志文件的自动重建。
首先,确保你的日志配置是正确的。Beego 使用 conf/app.conf
文件进行配置,你可以在 [log]
部分设置日志文件的路径和名称。例如:
[log]
file = "logs/app.log"
level = "info"
如果日志文件被删除,你可以通过以下几种方式确保日志能够继续记录:
-
定期检查和创建日志文件:编写一个监控脚本,定期检查日志文件是否存在,如果不存在则创建一个空文件。这可以通过简单的 shell 脚本或 Go 程序实现。
-
日志初始化逻辑:在应用启动时,检查日志文件是否存在。如果不存在,则手动创建它。这可以通过在应用的
init
函数中添加逻辑来实现。 -
使用日志轮转库:考虑使用更高级的日志库,如
logrus
配合logrotate
,这些库提供了日志轮转和自动管理的功能,可以减少手动管理日志文件的麻烦。 -
捕获日志写入错误:在日志写入时捕获错误,如果因为文件不存在导致写入失败,则尝试重新创建日志文件。
通过以上方法,你可以确保在日志文件被删除后,Beego 应用能够自动或手动地重新创建日志文件,从而继续记录日志信息。