2010-06-07 491 views
24

,而如何在PHP中換行符在error_log中在PHP

使用error_log()插入新行我試圖用<br>\n但那些沒有工作。

把錯誤消息時
+4

我不會那麼做的。我希望錯誤日誌中的每一行都是一個單獨的條目。將消息分散在兩行或更多行將會破壞這一點。 – Gumbo 2010-06-07 06:40:28

回答

45

使用雙引號:

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.'); 

將無法​​正常工作:請注意單引號。

+0

您還沒有給出第二個和第三個參數(錯誤日誌文件的名稱) – Satish 2010-06-07 06:40:36

+7

那麼?其他參數是可選的。也許你應該指定你想要達到的目標,因爲AFAICT你剛剛被解決了你的問題。 – wimvds 2010-06-07 09:26:52

+0

@Satish,對於遲到的評論感到抱歉,但是,如果我們不放置任何第二個和第三個參數,日誌會被寫入到php的默認錯誤日誌文件:'php_errors.log',這是受歡迎的。 – Pupil 2015-03-13 08:56:57

3

我偶爾會遇到這個問題,但某些PHP解釋器並不總是公平對待\n。我的醜陋解決方案需要爲換行符添加原始ASCII代碼,\10,似乎有訣竅。因此,嘗試\n\10

error_log("\n\10\n\10".$this->db->last_query()."\n\10\n\10"); 

這是慘兮兮的代碼,所以你可能要包裝成自己的函數這...但它使錯誤日誌看起來好多了,如果你想要的東西脫穎而出。

我也不知道爲什麼這個效果會更好......不在乎足夠了解,但如果有人知道原因,聽起來會很酷。

21

PHP_EOL管理多個平臺上的換行符:

error_log("Error message".PHP_EOL, 3, 'error.log'); 
+1

不錯,在IIS上運行的PHP可以正常工作。 \ 10沒有工作,但這是一個。 – Jordi 2016-05-25 09:03:02

0

調試時,如果你想使你的錯誤日誌行中脫穎而出當你看日誌「尾-f」,我用一個小功能這樣可以使線條突出並易於閱讀。

只是拋出一些空白空間和一個常見術語,如'CUSTOM_LOG'以備後用。

highlight_error_log('Msg here'); 

function highlight_error_log($str){ 
    error_log('CUSTOM_LOG:   ' . $str . '   '); 
} 
16

正如前面提到的,你可以使用PHP_EOL或者爲了使用雙引號來輸出新行到你的日誌文件。

無論如何,當使用linux控制檯來調試應用程序時,tail命令會將新行顯示爲\\\\n

簡單的解決方案是使用sed爲了與\\n更換\\\\n

tail -f file | sed 's/\\n/\n/g' 

看到這個答案:
https://serverfault.com/a/126409

+0

以及如何使用它與grep? – BIOHAZARD 2016-11-17 14:34:27

+0

這實際上證明了error_log不能正確輸出換行符。尾巴不會自動轉義任何東西。這是解決這個問題的唯一辦法。 – Phil 2017-08-23 07:26:26