如何在不中断服务的情况下在 Windows 上轮换 apache 日志?

Joe*_*Joe 5 windows logging logrotate apache-2.2

我管理运行 Apache2 和 ColdFusion 的 Windows Server 2003(标准版,32 位)安装。该服务器有 100 多个虚拟主机,每个主机都有一个访问日志和一个错误日志。我一直在寻找经典 Linux logrotate命令的模拟(或 win32 端口),它允许日志文件轮换而不中断 Apache 的锁定机制。

我找到的每个解决方案,包括chomp、名称冲突的logrotate bash 脚本、apachelogrot和几个 Perl 日志轮换脚本;他们都:

  • 停止阿帕奇
  • 旋转日志
  • 启动阿帕奇

显然,对于如此多的虚拟主机,这是不可取的,因为它每晚会停止和重新启动 Apache 数百次。

我还使用了 apache 附带的rotatelogscronolog 进行了调查,它们使用管道输出来创建单独的每日/每周/每月日志。这些程序不需要重新启动 apache 来轮转日志,但它们会为每个日志文件生成一个进程实例,从而导致运行数百个额外的守护进程,每个进程消耗 200-300k 的内存。

我还尝试在 cygwin 上编译经典的 Linux logrotate命令,但没有成功。

你们对我接下来应该尝试什么有什么建议吗? 或者,更好的是,你们中有人设法让经典的 Linux logrotate命令在 cygwin 或任何其他 win32 编译器上进行编译吗?

小智 2

作为解决方法,您可以切换为所有虚拟主机使用单个日志,并使用split-logfile或类似的方法对它们进行后处理(将它们放入每个虚拟主机的单独日志中)。这是 Apache 文档中推荐。不确定它是否适合您的环境。