【问题标题】:Force Apache to update log files path without restart in WAMP强制 Apache 更新日志文件路径而不在 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 个可能的方法可以解决我的问题,但可能还有另一种方法:

  1. 在不停止 Apache(或 WAMP 中的任何其他组件)的情况下重新加载整个 httpd.conf
  2. 仅强制更新 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 服务重启。

标签: apache logging wamp httpd.conf


【解决方案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 服务器。您无法进行任何日常维护。

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2015-04-01
    • 2013-11-03
    • 2020-10-28
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多