【问题标题】:Best way to rotate Apache log files [closed]轮换 Apache 日志文件的最佳方法 [关闭]
【发布时间】:2010-09-07 19:50:53
【问题描述】:

我有一个 Apache 服务器,它有一个超过 600MB 的访问日志文件。这使得搜索或解析文件变得非常困难。
有哪些适用于 Apache 的软件或模块可以制作我的访问文件的每日副本以使其更易于管理?

【问题讨论】:

  • 你很幸运 - 我面对的是 2.4 GIGABYTES :(
  • 您可以指出您是否真的在寻找 Apache 模块,或者依赖于所使用的操作系统的东西,例如 logrotate 或 cron(已经在答案中提到)。这可能有助于回答这个 - 在我看来 - 简单的问题。
  • 这里有 14GB!仅仅一年多的参赛作品。
  • 我不关心日志,只希望它们不会无限增长:在 WIN 上,我使用它来拥有最大 7x15 mb 的日志。 CustomLog "|bin/rotatelogs.exe -l logs/access.%A.log 15M" common
  • 从头开始,根据错误 51081 issues.apache.org/bugzilla/show_bug.cgi?id=51081 rotatelogs 不会覆盖

标签: apache logging webserver apache2 apache2.4


【解决方案1】:

您是否查看过logrotate - 这可能是实现这一目标的最简单、最广泛可用且易于理解的方法。它是高度可配置的,可能会完成您需要的 90%。

【讨论】:

  • 像 Brian 的回答这样的使用示例会非常有帮助。谢谢。
  • logrotate 的缺点是日志文件将继续写入旧文件名,直到进程重新启动。
【解决方案2】:

我是Cronolog 的忠实粉丝。只需通过它安装和管道您的日志。对于每日日志轮换,这样的事情会起作用:

ErrorLog  "|/usr/bin/cronolog /path/to/logs/%Y-%m-%d/error.log"
CustomLog "|/usr/bin/cronolog /path/to/logs/%Y-%m-%d/access.log" combined

非常方便,一旦安装,(根据我的经验)比 logrotate 更容易。

【讨论】:

  • 当我使用 cronolog 时,我在日志文件达到 2GB 数据时遇到了一些问题。那时没有更多的日志记录并且 apache 停止,直到我删除/重命名文件。从那时起我就使用 logrotate 并且一切都很好:)
【解决方案3】:

Windows 的实际命令,在网上很难找到:

CustomLog '|" "*Apache-Path/bin/rotatelogs.exe" 
    "**Apache-Path*/logs/backup/internet_access_%d-%m-%y.log" 86400' combined

“internet_access”位是您为文件选择的名称,86400 是一天中的秒数。您需要将 Apache-Path 更改为您安装 Apache 的相关目录。

【讨论】:

  • 我没有尝试在路径周围加上引号,而是最终缩短了它们,例如 "c:/Progra~1/..." 也花了一段时间,但我最终意识到我需要在路径中使用正斜杠。
  • 不要在路径中使用反斜杠,它不起作用!或者,您可以使用mod_log_rotate。使用此 mod 还可以防止 Windows 下的 cmd.exe 问题。
  • 我确实在 Apache2.4 (Windows 8) 中遇到了一些用于实现日志轮换的问题。但固定如下。在 httpd.conf 文件中添加以下行 ServerRoot "c:/Apache24" # Apache 安装路径 #CustomLog "|bin/rotatelogs logs/access.log.%Y-%m-%d 86400" common # 这个上面不行,但是当添加.exe时,它起作用了。 CustomLog "|bin/rotatelogs.exe logs/access.log.%Y-%m-%d 86400" common
  • 请注意,-n 4“循环日志”选项可能无法按预期工作,除非您添加 -L basename 选项。
  • @alimack 你能给出配置rotatelog的确切命令吗,因为我在尝试启动apache服务器时得到unable to open log error
【解决方案4】:

logrotate

logrotate 可能是最好的解决方案。使用文件/etc/logrotate.conf 更改所有日志的设置。您将 weekly 更改为 daily,以便每天轮换日志。此外,您可能想要添加 compress 以便压缩档案。如果您不关心旧日志,您可以将 rotaterotate 4 设置为更低的值。

【讨论】:

  • 我很感兴趣 - 这与 apache 提供的“rotatelogs”有什么区别?为什么apache手册没有提到logrotate(但它确实提到了cronolog)?
  • 只是一个假设:这可能是因为 logrotate 并非在 Apache 正在运行的所有系统上都可用。我只在 Linux 安装中使用过它,它用于翻转所有系统日志,当然还有 Apache 的日志文件。
【解决方案5】:

CustomLog "|bin/rotatelogs /var/logs/logfile 5M" 通用

此配置将在日志文件大小达到 5 兆字节时轮换日志文件。

ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M" 

这将是重定向 Apache 日志的最佳方式。不需要用httpd编译mod。

【讨论】:

  • 是否有一些 rotatelogs 选项可以删除旧文件或覆盖它们?
  • @Tobia 你找到删除旧文件的解决方案了吗?
  • 没有日期日志名称,我不得不切换到索引日志名称 (rotatelogs.exe -n 3 filepath 1M)
【解决方案6】:

windows 操作系统上的rotatelog.exe 或cronolog.exe。它们用于 http.conf 中的管道命令 Mod_log_rotate 用于 apache 的附加模块仅用于访问日志轮换 Logrotate 仅适用于 unix 操作系统。

【讨论】:

    【解决方案7】:

    我有一个模块可以为您执行此操作,而无需外部管道等:

    http://www.poptart.org/bin/view/Poptart/ModAutorotate

    我尝试将它添加到 Apache 模块集合中,但现在似乎已经被破坏了一段时间。

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 2012-05-01
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多