Как вставить новую строку при использовании error_log()
в php
Я пытался использовать <br>
и \n
, но они не работали.
Как вставить новую строку при использовании error_log()
в php
Я пытался использовать <br>
и \n
, но они не работали.
При размещении сообщения об ошибке используйте двойные кавычки:
error_log("This is a two lined message. \nThis is line two.");
должен работать.
error_log('This is a one lined message. \nThis is the same line still.');
не будет работать: обратите внимание на одинарные кавычки.
PHP_EOL управляет переводами строк на нескольких платформах:
error_log("Error message".PHP_EOL, 3, 'error.log');
Как упоминалось ранее, вы можете использовать либо PHP_EOL
, либо использовать двойные кавычки, чтобы выводить новую строку в файл журнала.
В любом случае при использовании консоли linux для отладки приложения команда tail
покажет новую строку как \\\\n
.
Простое решение - использовать sed
, чтобы заменить \\\\n
на \\n
:
tail -f file | sed 's/\\n/\n/g'
Смотрите этот ответ:
https://serverfault.com/a/126409
Я иногда сталкиваюсь с этой проблемой, но некоторые интерпретаторы PHP не всегда справедливо относятся к \n
самостоятельно. Мое уродливое решение требует добавления необработанного кода ASCII для новой строки, \10
, похоже, делает трюк. Поэтому попробуйте \n\10
:
error_log("\n\10\n\10".$this->db->last_query()."\n\10\n\10");
Это печально выглядящий код, поэтому вы можете обернуть его в свою собственную функцию... но это делает журнал ошибок намного лучше, если вы хотите, чтобы что-то выделялось.
Я также не знаю, почему это работает лучше... не заботятся, чтобы узнать, но если кто-то знает, почему, было бы здорово услышать.
При отладке, если вы хотите, чтобы ваша строка журнала ошибок выделялась, когда вы просматриваете журнал "tail -f", я использую небольшую функцию, подобную этой, чтобы сделать линию отличной и легко читаемой.
Просто вставьте некоторое пробел и общий термин, например "CUSTOM_LOG" для последующих целей grepping.
highlight_error_log('Msg here');
function highlight_error_log($str){
error_log('CUSTOM_LOG: ' . $str . ' ');
}
Проблема возникает, когда процесс Apache не может записать в файл error_log, поэтому системный журнал записывает в файл. Системный журнал портит разрывы строк.
Так что просто сделайте:
chmod 777 error.log
Это должно решить вашу проблему.
Если путь к журналу ошибок не определен как в файле php.ini
и в вызове функции, то \n
и \r\n
не будут работать, даже если они заключены в двойные кавычки (вместо этого они будут отображаться в виде буквенных символов).
Вы можете исправить это, указав местоположение в php.ini
:
error_log = /var/log/php-errors.log
или в каждом вызове функции PHP так:
error_log("error message", 3, $logFileLocation);
Это правильный ответ PHP_EOL
управлять новыми строками на нескольких платформах:
error_log("Error message".PHP_EOL, 3, 'error.log');