【问题标题】:Why does my Apache2::Log output replace newlines with \n?为什么我的 Apache2::Log 输出用 \n 替换换行符?
【发布时间】:2009-10-15 17:32:12
【问题描述】:

我在 apache2 / mod_perl 下设置了多个虚拟主机。我使用ErrorLog 指令为每个虚拟主机获取单独的错误日志。这仅在我使用 Apache2::Log 时按预期工作。 'warn' 只会记录到常规错误日志中。

所以一切正常。最后。但是还有一个问题:当我通过 $r->log_error 登录时,我发现换行符被替换为\n

知道为什么会发生这种情况,以及如何解决吗?

谢谢。

【问题讨论】:

  • 您确定没有将它们放在单引号中吗? 'Hi\n'"Hi\n"

标签: perl apache newline error-log


【解决方案1】:

这不是 mod_perl 问题,而是 Apache 问题。显然,将未转义的输出打印到错误日志存在一些安全问题(我不完全确定为什么),因此在使用此构建/配置它时,您必须在 Apache 中显式启用它:

CFLAGS=-DAP_UNSAFE_ERROR_LOG_UNESCAPED ./configure

如果您使用的是已安装的 apache,则无法更改此设置。

【讨论】:

    【解决方案2】:

    如果您有预构建的安装,您可以使用这行代码来解决问题,但它必须包含在您的虚拟主机内的每个页面执行中,例如在 header.php 或 config.php 文件中。

    ini_set('error_log','/var/log/apache2/error.log');
    

    【讨论】:

    • 对于错误日志来说,这不是很聪明。如果这被遗漏了错误......
    【解决方案3】:

    我知道这是一个非常古老的线程,但仍然在谷歌搜索结果中名列前茅,所以为了帮助所有人,mod_perl.pl 中的以下更改确实帮助了我:

    在下方评论:

    BEGIN { *CORE::GLOBAL::warn = \&Apache2::ServerRec::warn; }
    

    以上是针对: 将警告发送到虚拟主机的日志,而不是主服务器日志。

    我希望这可以帮助像我这样的人:)

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多