2011-11-29 11 views
14

Pracuję nad kodem, który używa error_log() do debugowania. Problem polega na tym, że z jakiegoś powodu wszystkie przerwy w linii na wyjściu pojawiają się jako ciągi literalne, więc nie ma rzeczywistego podziału linii (co sprawia, że ​​prawie niemożliwe jest zrozumienie złożonych tablic).
Próbowałem używać zarówno var_export i print_r z funkcją error_log, a obie doprowadziły do ​​tego samego rezultatu: blok tekstu z rozrzuconymi w całym dokumencie \n. Próbowałem nawet wykonać str_replace\n do PHP_EOL bez powodzenia. Co ja robię źle?PHP error_log wypisywanie wierszy jako literałów " n" na Mac OSX

Aby wyjaśnić: ciągi znaków \n pojawiają się w przeglądarce protokołów błędów konsoli, TextEdit i terminalu.

EDIT

Chciałem tylko zauważyć wcześniej, że tak, jestem świadomy, że trzeba cudzysłów \n ciągi dla nich pojawiają się podziały wiersza. Mam jednak do czynienia z wyjściem z print_r lub var_export (w celu sprawdzenia tablicy), więc to naprawdę nie pomoże mi (myślę?).

Odpowiedz

5

Wygląda na to, że ten problem jest niezależny od systemu operacyjnego. Zobacz to pytanie: PHP error log and newline chars

... powinieneś być w stanie zmienić dyrektywę error_log w pliku php.ini na Debianie, aby wskazywała na plik. Jeśli jest to niezdefiniowane, przejdzie przez syslog, który nie obsługuje wielu linii.

+1

Należy również zauważyć, że dla Apache pisać nowe linie do error.log, będzie musiała uprawnienia do zapisu do tego (jeszcze syslog skończy się na piśmie do error.log zamiast). Trwa naprawa lub nowy plik "php-errors.log", jeśli chcesz zachować format syslog dla błędów Apache (moje preferencje). –

31

Jako alternatywę można przetwarzać/wymienić '\ n' poprzez sed, więc wyglądało jak nowe linie w konsoli:

Linux

$ tail -f error_log | sed "s/\\\n/\\n/g" 

Mac OS X

$ tail -f error_log | sed "s/\\\n/^M^L/g" 

Uwaga: W systemie Mac OS X, koniec linii jest CRLF (Kanał Carriage Return Line), gdy w systemie Linux to tylko LF (Line Feed)

Uwaga 2: W systemie Mac OS X na wyjściu ^M w terminalu, naciśnij Control+V Control+M, do wyjścia ^L naciśnij Control+V Control+L

+2

Dość sprytne obejście :) –

+2

Składnia OSX nie działa. – Tyguy7

+0

Jaka jest wersja OSX. Mavericks? – eightyfive