2011-09-21 161 views
14

PHP error_log方法不會將錯誤寫入自定義錯誤日誌文件。它只會寫/var/log/apache2/php_error.logPHP error_log方法不會將錯誤寫入我的錯誤日誌文件

下面是在日誌記錄設置我php.ini

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE 
display_errors = Off 
log_errors = On 
log_errors_max_len = 0 ; also tried with 9999999 
error_log = /var/log/apache2/php_errors.log 

PHP寫了錯誤的常規Apache的錯誤日誌(/var/log/apache2/error.log),而不是我上面指定的那個。

事情我已經嘗試過:

  1. 我停下來改變php.ini文件
  2. 文件/var/log/apache2/php_errors.log是777個權限和文件存在後重新開始的Apache。
  3. 沒有其他重寫的php.ini文件。 (有/etc/php5/cli/php.ini,但我沒有使用cli)。
  4. 有沒有其他的error_log = XXX設置的進一步下降,這可能會否決第一個
  5. 的phpinfo的php.ini文件()說的error_log = /var/log/apache2/php_errors.log(即正確的文件),這兩個地方下的價值和主值
  6. 測試腳本我使用生成的錯誤不包含任何的ini_set調用

(FYI:我使用的Apache/2.2.17和PHP/5.3。 Ubuntu 11.04上的5-1ubuntu7.2)

我在做什麼錯?

+1

你試圖改變文件名以一些別的嗎?或者嘗試其他文件夾? – Olli

+1

檢查php.ini文件是否加載(查看phpinfo()函數的輸出) – classic

+0

感謝Olli,我將其更改爲/usr/php_errors.log,現在它可以工作! –

回答

1

刪除php_errors.log並重新啓動apache2,服務器本身將創建一個具有適當權限和所有者的新php_errors.log文件。

rm -f /var/log/apache2/php_errors.log 
service apache2 restart 

ll /var/log/apache2/php_errors.log 
2

你可以嘗試指定這樣的文件名:

我在Ubuntu上使用Apache 2.2.22。

使用此PHP命令:

error_log("eric", 3, "/home/el/error.log"); 

第一個參數是將被髮送到錯誤日誌消息。第二個參數3表示「期待一個文件名目的地的第三個參數是目標

創建文件/home/el/error.log並設置其所有權的:。

[email protected]:~$ ll error.log 
-rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log 

當PHP解釋的error_log方法,其追加的消息到您的文件

來源: http://www.php.net/manual/en/function.error-log.php

0

您可以設定在虛擬主機站點配置站點的錯誤日誌文件文件,例如。G:/etc/apache2/sites-enabled/example.com.conf

<VirtualHost *:80> 

    .... 

    ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log 
    LogLevel warn 
    CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined 

</VirtualHost> 

在UNIX系統${APACHE_LOG_DIR}通常/var/log/apache2 錯誤和訪問將保存在${APACHE_LOG_DIR}/www.example.com-error.log${APACHE_LOG_DIR}/www.example.com-access.log

9

我想回答這個問題,因爲它在Google上的成績很高,即使這是一個老問題。

我通過爲日誌目錄上的所有用戶添加寫入權限來解決此問題。

在我的情況下,是能夠在需要用戶的「http」寫入到/ var /日誌/的httpd /所以我跑

# chmod a+w /var/log/httpd 

如果該文件已經存在,它可以幫助先刪除它並允許Apache創建它。

我的php.ini文件也包含整個路徑。

error_log = /var/log/httpd/php_errors.log 
-4

我花了幾個小時試圖今天爲什麼這是行不通的,並試圖調試代碼迴避的事實,我可以記錄任何的PHP錯誤日誌工作弄清楚。不用說,我一直在蝸牛的步伐,直到我的伐木工作。

我猜測超過90%的時間是權限問題。在我的情況下,守護進程是日誌文件的所有者和組,並且我必須以sudo su爲根,然後更改日誌文件的權限。我改成:

chmod 777 myphperror.log

感謝上帝stackoverflow.com

+0

OP說他們檢查了權限。您的答案不會添加任何內容。 – betseyb

+2

宗教引用也不合適 –

+2

當你的回答是chmod 777時,有一個很大的可能性,它不是正確的。 – Andrea