每天将长时间运行的进程的输出重定向到新的日志文件

每天将长时间运行的进程的输出重定向到新的日志文件

我们有一个长时间运行的进程1,其输出根据进程启动时间捕获到日志文件中:

export LOG_FILE=${LOGS_DIR}/$LOGNAME/${LOGNAME}-`date +%Y%m%d-%H%M%S`.txt
...
${TARGET_SCRIPT} ${OPERATION} ${ARGS} >> ${LOG_FILE} 2>&1

我们的问题是,尽管大多数应用程序日志记录是通过我们的日志记录框架完成的,但有些内容仍然会偷偷溜到 stdout 和 stderr,并且当出现问题时23,控制台输出日志可能会变得非常大。

所有日志(包括控制台日志和来自我们的日志框架的日志)都会写入空间有限的高性能文件系统中,因此我们运行 jenkins 作业来归档一周内未触及的文件(如有必要,请压缩它们)。

这对于我们的主日志框架非常有效,该框架在压缩前一天的日志之前在午夜滚动日志文件。失控日志记录最多只有一天的未压缩输出,并且在压缩失控日志时,压缩效率可能非常高,因此自动归档可以最大限度地降低文件系统填满的风险。

然而,控制台日志的工作效果不太好,因为这些文件可能一次保存几个月,并且只有重新启动该进程才会创建一个新文件,从而允许 jenkins 作业在一周后压缩和归档该文件。

那么,我怎样才能让我们的控制台日志每天分割呢?

我想要的是>> ${LOG_FILE}用类似的东西替换| logsplitter --append ${FILE_SPEC},而不必编写(并详尽地测试)这个logsplitter程序/脚本。我希望这样的东西可能已经存在,但我的 google foo 到目前为止还没有让我失望。

1 - 它可以运行几个月。
2 - 我们使用的一些库直接向控制台生成错误消息。
3 - 日志记录框架中的故障可能会导致回退到 stderr 日志记录。

相关内容