轮换 Apache 日志文件的最佳方式 [已关闭]

Best way to rotate Apache log files [closed]

提问人:Scott Gottreu 提问时间:9/4/2008 最后编辑:kjonesScott Gottreu 更新时间:9/14/2019 访问量:109913

问:

闭。这个问题是题外话。它目前不接受答案。

想改进这个问题吗? 更新问题,使其符合 Stack Overflow 的主题

10年前关闭。

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

Apache 日志记录 Web 服务器 apache2.4

评论

7赞 Bobby Jack 10/15/2008
幸运的是,我面对的是 2.4 GB :(
0赞 Kariem 1/14/2009
你可以指出你是否真的在寻找一个Apache模块,或者取决于所使用的操作系统的东西,比如logrotate或cron(在答案中已经提到过)。在我看来,这可能有助于回答这个简单的问题。
1赞 Liam 8/13/2010
14GB在这里!只有一年多的参赛作品。
0赞 Tilo 2/19/2014
我不关心日志,只希望它们不会无限增长:在 WIN 上,我用它来拥有最大 7x15 mb 的日志。CustomLog “|bin/rotatelogs,.exe -l logs/access.%A.log 15M” common
0赞 Tilo 2/19/2014
根据 Bug 51081 issues.apache.org/bugzilla/show_bug.cgi?id=51081 rotatelogs 不会覆盖

答:

50赞 serg10 9/4/2008 #1

你有没有看过 logrotate - 这可能是实现这一点的最简单、最广泛可用和最容易理解的方法。它是高度可配置的,可能会完成您需要的 90%。

评论

16赞 Ryall 8/2/2012
像 Brian 的回答这样的用法示例会非常有帮助。谢谢。
1赞 MarkHu 7/14/2015
缺点是日志文件将继续写入旧文件名,直到进程重新启动。logrotate
11赞 Eric Hogue 9/5/2008 #2

logrotate

logrotate可能是最好的解决方案。使用该文件更改所有日志的设置。你换了一辆货车,所以原木每天都会轮换。此外,您可能希望添加以压缩存档。如果您不关心旧日志,可以将 rotate 设置为更低的值。/etc/logrotate.confweeklydailycompressrotate 4

评论

1赞 Bobby Jack 10/15/2008
我很好奇 - 这与 apache 提供的“rotatelogs”有什么区别?为什么 apache 手册没有提到 logrotate(但它确实提到了 cronolog)?
2赞 Kariem 1/14/2009
只是一个假设:这可能是因为 logrotate 并非在 Apache 运行的所有系统上都可用。我只在 Linux 安装中使用它,它用于滚动所有系统日志,当然还有 Apache 的日志文件。
28赞 Brian 9/5/2008 #3

我是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 更容易。

评论

2赞 maxgalbu 12/14/2013
当我使用 cronolog 时,当日志文件达到 2GB 数据时,我遇到了一些问题。在这一点上,没有更多的日志记录,apache 停滞不前,直到我删除/重命名文件。从那时起,我开始使用 logrotate,一切都很好:)
13赞 alimack 12/10/2008 #4

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 的相关目录。

评论

0赞 Pedro 3/11/2011
我没有尝试在路径周围换行引号,而是最终缩短了它们,例如“c:/Progra~1/...”此外,花了一段时间,但我最终意识到我需要在路径中使用正斜杠。
1赞 s106mo 7/7/2011
不要在路径中使用反斜杠,这是行不通的!或者,您可以使用mod_log_rotate。使用此模组还可以防止 Windows 下的 cmd.exe 问题。
1赞 user292049 9/17/2014
我在 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
0赞 MarkHu 7/14/2015
请注意,除非添加该选项,否则“循环日志”选项可能无法按预期工作。-n 4-L basename
0赞 Dharani Dharan 11/24/2015
@alimack 你能给出配置rotatelog的确切命令吗,因为我在尝试启动apache服务器时得到了。unable to open log error
1赞 fabien 8/4/2010 #5

在 Windows 操作系统上旋转日志 .exe 或 cronolog.exe。它们用于 http.conf 的 pipe 命令 Mod_log_rotate apache 的附加模块,仅用于访问日志轮换 Logrotate ONLY 用于 unix 操作系统。

0赞 Jake Scott 11/27/2010 #6

我有一个模块可以为您做到这一点,而无需外部管道等:

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

我试图将它添加到Apache模块集合中,但这似乎已经有一段时间了。

3赞 Bipin 6/21/2011 #7

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

每当日志文件达到 5 MB 的大小时,此配置将轮换日志文件。

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

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

评论

2赞 Tobia 9/12/2014
是否有一些 rotatelogs 选项可以删除旧文件或覆盖它们?
0赞 surya 9/27/2018
你@Tobia找到删除旧文件的解决方案了吗?
1赞 Tobia 9/27/2018
没有日期日志名称,我不得不切换到索引日志名称(rotatelogs.exe -n 3 filepath 1M)
0赞 not2savvy 9/21/2022
使用 ,我发现日志文件每次都会被覆盖而不是附加到。有没有办法追加到现有的日志文件?rotatelogs -t ... 100Mrotatelogs