PHP / Apache error.log не выполняет символы new_line, почему? - PullRequest
2 голосов
/ 14 декабря 2011

Например, вместо того, чтобы получить следующее

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

Я просто получаю это:

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

Это действительно неудобно читать при отладке моего кода.Поэтому, если у вас есть какие-либо предположения о том, почему это не может работать нормально, скажите мне.

Я запускаю его в Windows 7 Putty, подключенной к виртуальному серверу Ubuntu, который работает, предположительно, по умолчанию в конфигурации Apache / PHP.(ну, вероятно, нет, но, как всегда, никто в команде не помнит, чтобы что-то изменилось)

edit: Кто-то запросил код, который пишет в 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 не выполняется должным образом.

Ответы [ 4 ]

8 голосов
/ 25 апреля 2012

Я тоже столкнулся с той же проблемой, но потратив несколько минут, я нашел решение.

Когда вы делаете 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 в качестве команды.

1 голос
/ 24 октября 2018

Проблема возникает, когда процесс Apache не может записать в файл error_log, поэтому системный журнал записывает в файл.Системный журнал портит разрывы строк.

Так что просто сделайте:

chmod 777 error.log

Это должно решить вашу проблему. Источник

1 голос
/ 11 февраля 2015

В некоторых случаях (например, Mac) использование perl может работать лучше:

tail -100f /var/log/apache2/error.log | perl -pe 's/\\n/\n/g'
0 голосов
/ 14 декабря 2011

Если вы просматриваете вывод в браузере, попробуйте заключить ваш вывод в теги <pre>.

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

выводит в браузер отформатированный массив

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