Apache vhost日志按date旋转

我已经在Debian 7(在VPS上)上运行了Apache 2.2,为几个不同的网站定义了虚拟主机

我已经为每个虚拟主机设置了单独的错误和访问日志,但是我还没有find一种方法来根据我的喜好来旋转/归档日志。

当然,Debian上默认的Apache日志是通过logrotate旋转的,但是由于种种原因我并不觉得特别满意 – 主要是因为我想让归档日志按date命名,而且因为每个vhost分别configuration它看起来很麻烦。 我也不确定自动删除旧日志; 我可能只想从服务器下载它们之后手动执行此操作。

我的理想解决scheme是每个月(甚至每周)都做下面的事情:

  • 将date附加到文件名,或将文件移动到名为date的子文件夹。
  • Gzip存档的文件。

我也需要这个很容易设置为多个虚拟主机。

理想情况下,不应该涉及到重新启动Apache(尽pipe优雅的重启不是世界末日)。

设置这个最好的方法是什么? 我相信这是在…之前完成的

我是否检测到NIH的一点点?

这就是为什么你不应该这样做:

  1. 扩展比重塑更好:基本上,你想要做的事情已经被logrotate覆盖了。 如果你不喜欢它的默认行为,那么可以通过它的前/后动作,命名约定等等 , 把它configuration成不同的行为 。

  2. 解决一个已经解决的问题:那些为logrotate做贡献的人以前遇到过你的问题,然后是一些问题。 在某种程度上,你很可能遇到同样的细节问题,并以更多的经验和反馈来解决问题……你真的想浪费你的精力来解决它们吗?

  3. 不删除旧日志是一个非常糟糕的主意。 这导致了一个等待填满你的日志分区的游戏 – 取决于你的设置,你的应用程序,甚至整个服务器,都会停下来。 最好在日常业务的高峰期。

    如果出于会计原因(安全,财务,政府)需要保留旧日志,则必须为他们实施归档解决scheme。

  4. 支持自制软件 :如果遇到问题,没有人可以问,因为只有你使用这个解决scheme – 而logrotate被其他许多人使用。

  5. 设置简单:只需要​​相应的虚拟主机configuration。 争取自动化。

请注意,以上原因并不是一成不变的,不适用于任何地方。 时不时挑战现有的解决scheme( 可能有更好的解决scheme),但在这种情况下,我认为这是徒劳无功的。

我在网上发现了这个问题的各种解决scheme,但没有一个完全令人满意,但其中有几个是可以接受的。 这些包括Apache自己的rotatelogs脚本 ,它涉及将日志传送给脚本以及告诉脚本如何分割和命名文件的参数。

但最后,我最终使用了logrotate 。 事实certificate,我很惭愧地说,我一直在阅读的在线手册页已经过时了,实际上,logrotate现在有能力按date命名文件,这是我想要的主要内容。

我也能够使用通配符,以避免在将来每次添加虚拟主机时都必须为logrotate设置新的configuration文件。

对于其他人试图做到这一点,我使用的logrotateconfiguration如下:

 /var/www/*/logs/*.log { weekly missingok rotate 52 compress delaycompress dateext dateformat .%Y%m%d extension .log olddir old create 640 root root sharedscripts postrotate /etc/init.d/apache2 reload > /dev/null endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; fi; \ endscript } 

我相信我会在将来改变它,但是作为一个起点,没关系。

(注意, olddir是必要的,否则*.log也会匹配上周的日志文件…)

另一种select可以通过CRON来完成。 我是这样做的;

 #!/斌/庆典

用于/var/www/*/logs/*.log文件; 做
     #zip和截断文件(不要删除COS Apache无法写在它,除非重新启动)
     zip $(dirname $ file)/ $(date +“%Y-%m-%d”) -  $(basename $ file).zip $ file && truncate -s 0 $ file
 DONE

该脚本将生成一个压缩日志文件,如/var/www/example.com/logs/2010-01-01-access.log.zip