强制 Apache 更新日志文件路径而不在 WAMP 中重新启动

Posted

技术标签:

【中文标题】强制 Apache 更新日志文件路径而不在 WAMP 中重新启动【英文标题】:Force Apache to update log files path without restart in WAMP 【发布时间】:2016-05-07 08:35:07 【问题描述】:

我如何强制 ApacheWAMP 的一部分)写入 新日志 >新的日志文件而不重新启动服务器?


Apache2\conf\httpd.conf 中,我更新了 ErrorLogCustomLog 指令的路径。

之前:

ErrorLog ../logs/a.log
...
CustomLog ../logs/b.log common

之后:

ErrorLog ../logs/a2.log
...
CustomLog ../logs/b2.log common

LogLevelLogFormat 指令未更改。

在更改它们之后,我设法(我不知道如何 - 意外或它是自动完成的,但我确信我没有明确重新启动服务器)在新文件中获取新日志。也许这并没有立即发生,因为我在 20 分钟后观察到了这一点(新日志文件被创建并且新日志进入它们,而不是旧日志)。这就是我想要达到的目标!

但后来我又改变了路径:

../logs/a2.log => ../logs/a3.log ../logs/b2.log => ../logs/b3.log

但日志没有进入新路径(它们仍被写入../logs/a2.log../logs/b2.log)。

我正在考虑以下 2 个可能的方法可以解决我的问题,但可能还有另一种方法:

    在不停止 Apache(或 WAMP 中的任何其他组件)的情况下重新加载整个 httpd.conf。 仅强制更新 ErrorLogCustomLog 行(就直接在 cmd 中执行某些命令而言,忽略 httpd.conf 文件)。

详情

WAMP5 1.6.6(升级不是解决方案) Apache 2.0.59(大约 9 年前发布) 我无法重新启动服务器,因为用户需要不间断地访问应用程序。

【问题讨论】:

我不使用 wamp,但一般apachectl graceful 可用于重新加载配置而不会终止现有连接。 或 apache 重新加载(httpd 重新加载) 这些不是 Linux 的解决方案吗? 你的意思是像 logrotate 这样的东西吗? 此时的目的只是为了改变输出的位置。然后,我可以使用 CustomLog "|bin/rotatelogs.exe ../logs/b.%Y.%m.%d-%H.log 3600" common 。所以,现在我只想使用新的日志文件,直到第一次 Apache 服务重启。 【参考方案1】:

要正确回答这个问题,您需要告诉我在您的 apache 配置中使用了哪个日志记录 API。

如果使用 log4j,请查看以下 URL Log4j Automatic Configuration

您将在此处找到有关在 Log4j 配置文件中设置 monitorInterval 属性的信息。将此属性设置为非零值 (> 5) 将导致在下一次评估和/或记录日志事件时检查文件,并且自上次检查以来已以秒为单位指定的 monitorInterval 已过去

【讨论】:

这个问题与服务器日志系统有关,而不是与每个应用程序的日志记录有关。在 WAMP 中,Apache 使用一个模块来记录 mod_log_config.so,该模块加载在 httpd.conf 中。【参考方案2】:

在 Windows 上,apache.exe -k restart 比较优雅——进行中的请求需要 30 秒才能完成。

除此之外,您可能无法找到一种安全的方式来重命名 Windows 上正在写入的文件。出于这个原因,您永远不应该运行单个 HTTP 服务器。您无法进行任何日常维护。

【讨论】:

以上是关于强制 Apache 更新日志文件路径而不在 WAMP 中重新启动的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf 强制WWW,但不在子域上。

apache_conf 强制WWW,但不在子域上。

Apache mod_rewrite:仅当不在本地主机中时才强制 www

Apache的日志分析

强制 java jar 不在 EMR 上使用类路径包

获取文件路径而不在内存中加载文件?