目前系统到处都打印日志,有各自模块的 logger ( gorm ,gin ,业务日志...),目前用的是 supervisor 管理,但是当系统并发数较高,日志打印过多,会导致 supervisor 的 cpu 飚升。
尽管各个日志都有 logger ,可以设置 SetOutput 直接写到文件,但是总有一些第三方库输出到 stdout ,所以没有办法实现统一定向到日志文件。目前找到的一个办法是:
file, err := os.OpenFile("log", os.O_APPEND|os.O_WRONLY|os.O_CREATE, os.ModePerm)
syscall.Dup2(int(file.Fd()), int(os.Stdout.Fd()))
syscall.Dup2(int(file.Fd()), int(os.Stderr.Fd()))
这样可以将 stdout 直接输出到日志,可以实现自己的需求,但是感觉不像是一个常规的方案,有没有比较好的日志方案,尽量简洁,能做到所有日志写入文件,最好能实现自动 rotate 。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.