如何在Java或其他平台中创建logrotate友好文件编写器?

nbe*_*yer 10 java logging logrotate

在Java中实现与logrotate兼容的文件编写器/记录器的最佳实践是什么?目标是允许logrotate用于所有日志管理,而不是使用内置的日志API(Log4J等)的轮换/管理.

除了Java之外,我还有兴趣听取其他开发平台的评论/答案.

Jar*_*iuk 9

您只需要定期关闭并重新打开应用程序内的日志文件.您需要一个保持最后关闭时间的处理程序.处理程序应该关闭并重新打开文件,如果(例如)自上次关闭后经过20秒并且即将写入日志条目.它应该在写入日志条目之前进行此类检查

如果不这样做,日志将被写入旧文件,即使它被logrotate(!)重命名(文件描述符保持不变),然后日志被压缩和删除后日志条目将消失(在这种情况下,java将默默地删除此类日志).

关闭并重新打开日志(使用文件名)将确保如果文件已重命名,则将创建新文件.每次写入日志时关闭并重新打开文件都是一种过度杀伤,因为打开文件是一项代价高昂的操作.