【问题标题】:PHP/Apache error.log doesn't execute new_line characters, why?PHP/Apache error.log 不执行 new_line 字符,为什么?
【发布时间】:2012-01-20 04:43:14
【问题描述】:

例如,而不是得到以下

post:Array (
  "a" => "b",
  "c" => "d"
)

我刚刚明白了:

post:Array (\n  "a" => "b",\n  "c" => "d"\n)

在调试我的代码时阅读这篇文章真的很不舒服。因此,如果您对为什么这无法正常工作有任何建议,请告诉我。

我在连接到 Ubuntu 虚拟服务器的 Windows7 Putty 中运行它,据说它运行的是默认的 Apache/PHP 配置。 (可能不会,但团队中没有人记得改变过任何东西)

编辑:有人请求写入error.log的代码:

<?php
error_log(print_r(array("a"=>"b","c"=>"d"),1));
?>

查看错误日志的命令有:

sudo tail -f /var/log/apache2/error.log
sudo vim /var/log/apache2/error.log
sudo cat /var/log/apache2/error.log

在所有情况下,都会出现\n 未按预期执行的问题。

【问题讨论】:

  • 处理换行符由编辑器/查看器完成。尝试使用不同的。
  • 向我们展示正在写入错误日志的代码。
  • 已尝试并添加了信息。

标签: php apache ubuntu error-handling


【解决方案1】:

我也遇到了同样的问题,但花了几分钟后我得到了解决方案。

当你做tail时,使用如下:

sudo tail -f /var/log/apache2/error.log | sed -e 's/\\n/\n/g'

如果需要,您可以创建一个文件。给它起个名字并粘贴上面的命令并将其放在/usr/bin/ 文件夹中。

例如

vi tailme

附内容:

#!/bin/bash
tail -f /var/log/apache2/error.log | sed -ue 's/\\n/\n/g'

并将其放入/usr/bin/。现在您可以使用tailme 作为命令。

【讨论】:

  • 正是我想要的,谢谢!知道是否有自动启用此功能的终端设置?
  • 您可以创建与上述相同的脚本,但使用此 tail -f $1 | sed -ue 's/\\n/\n/g' 这将让您输入类似 nameofmyscript /loglocation/logname 的内容,它会自动填充其余部分。
【解决方案2】:

在某些情况下(例如 Mac),使用 Perl 可能会更好:

tail -100f /var/log/apache2/error.log | perl -pe 's/\\n/\n/g'

【讨论】:

    【解决方案3】:

    问题是由于Apache进程无法写入error_log文件,所以syslog改为写入文件。系统日志弄乱了换行符。

    那就这样吧:

    chmod 777 error.log
    

    这应该可以解决您的问题。 Source.

    【讨论】:

    • chmod 777 = "设置权限,(U)ser / owner 可以读,可以写,可以执行。(G)roup 可以读,可以写,可以执行。(O)thers可以读,可以写,可以执行。”。这有多安全?
    【解决方案4】:

    当调用error_log 时,您可以强制 PHP 直接记录,而不是将其传递给 Apache,这是默认行为。为此,只需将 3 指定为第二个参数,将文件路径指定为第三个参数。

    error_log("error message", 3, $logFileLocation);
    

    欲了解更多信息,请查看PHP error_log documentation

    【讨论】:

      【解决方案5】:

      如果您在浏览器中查看输出,请尝试使用&lt;pre&gt; 标签包装您的输出语句。

      <?php
          $post = Array("a" => "b", "c" => "d");
          echo "<pre>";
          print_r($post);
          echo "</pre>";
      ?>
      

      向浏览器输出一个格式化的数组:

      Array
      (
          [a] => b
          [c] => d
      )
      

      【讨论】:

      • 好主意。可悲的是,它与浏览器或代码无关。我从 shell 中查看 error.log。
      • pre 标签与浏览器高度相关,但与基于 PHP 文件的错误日志完全无关
      猜你喜欢
      • 2011-06-21
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多