强制 Apache 更新日志文件路径而不在 WAMP 中重新启动
Posted
技术标签:
【中文标题】强制 Apache 更新日志文件路径而不在 WAMP 中重新启动【英文标题】:Force Apache to update log files path without restart in WAMP 【发布时间】:2016-05-07 08:35:07 【问题描述】:我如何强制 Apache(WAMP 的一部分)写入 新日志到 >新的日志文件而不重新启动服务器?
在 Apache2\conf\httpd.conf 中,我更新了 ErrorLog
和 CustomLog
指令的路径。
之前:
ErrorLog ../logs/a.log
...
CustomLog ../logs/b.log common
之后:
ErrorLog ../logs/a2.log
...
CustomLog ../logs/b2.log common
LogLevel
和 LogFormat
指令未更改。
在更改它们之后,我设法(我不知道如何 - 意外或它是自动完成的,但我确信我没有明确重新启动服务器)在新文件中获取新日志。也许这并没有立即发生,因为我在 20 分钟后观察到了这一点(新日志文件被创建并且新日志进入它们,而不是旧日志)。这就是我想要达到的目标!
但后来我又改变了路径:
../logs/a2.log
=> ../logs/a3.log
../logs/b2.log
=> ../logs/b3.log
但日志没有进入新路径(它们仍被写入../logs/a2.log
和../logs/b2.log
)。
我正在考虑以下 2 个可能的方法可以解决我的问题,但可能还有另一种方法:
-
在不停止 Apache(或 WAMP 中的任何其他组件)的情况下重新加载整个 httpd.conf。
仅强制更新
ErrorLog
和 CustomLog
行(就直接在 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 中重新启动的主要内容,如果未能解决你的问题,请参考以下文章