首頁  >  文章  >  後端開發  >  php輸出日誌

php輸出日誌

不言
不言原創
2018-04-17 09:02:4216336瀏覽

這篇文章介紹的內容是關於php輸出日誌,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

轉自https ://www.cnblogs.com/yszr/p/8489433.html
error_log('你要輸出的資訊', 3, 'E:\work\jiajiayue\Application\Api\Controller\1.txt') ;die;
php error_log記錄日誌的使用方法和配置


對於PHP開發者來說,一旦某個產品投入使用,應該立即將display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連線、資料表等資訊而遭到駭客攻擊。但是,任何一個產品在投入使用後,都難 免會有錯誤出現,那麼如何記錄一些對開發者有用的錯誤報告呢?我們可以在單獨的文字檔案中將錯誤報告作為日誌記錄。錯誤日誌的記錄,可以幫助開發人員或 管理人員查看系統是否有問題。如果需要將程式中的錯誤報告寫入錯誤日誌中,只要在PHP的設定檔中,將設定指令log_errors開啟即可。錯誤 報告預設就會記錄到Web伺服器的日誌檔案裡,例如記錄到Apache伺服器的錯誤記錄檔error.log中。當然也可以記錄錯誤日誌到指定的檔案或傳送給系統syslog,分別介紹如下: 


1、使用指定的檔案記錄錯誤報告日誌


使用指定的文件記錄錯誤報告日誌使用指定的文件記錄錯誤報告日誌使用指定的文件記錄錯誤報告日誌如果使用自己指定的文件記錄錯誤日誌,一定要確保將這個文件存放在文檔根目錄之外,以減少遭到攻擊的可能。且該檔案一定要讓PHP腳本的執行使用者(Web伺服器進程擁有者)具有寫入權限。假設在Linux操作系 統中,將/usr/local/目錄下的error.log文件作為錯誤日誌文件,並設定Web伺服器進程使用者俱有寫的權限。然後在PHP的設定檔中, 將error_log指令的值設定為這個錯誤日誌檔案的絕對路徑。
需要將php.ini中的設定指令做以下修改: 
1. error_reporting  =  E_ALL                   ;將會向PHPors    ;不顯示滿足上條指令所有定義規則的所有錯誤回報  
3. log_errors = On                             ;決定記錄語句所記錄的位置  ;設定每個日誌項目的最大長度  
5. error_log = E:/php_log /php_error.log              ;指定產生的錯誤報告寫入的日誌檔案位置 
PHP 的設定檔以上面的方式設定完成以後,並重新啟動Web伺服器。這樣,在執行PHP的任何腳本檔案時,所產生的所有錯誤報告都不會在瀏覽器中顯示,而會記 錄在自己指定的錯誤日誌/usr/local/error.log中。此外,不僅可以記錄滿足error_reporting所定義規則的所有錯誤,還可以使用PHP中的error_log()函數,送出一個使用者自訂的錯誤訊息。


此函數的原型如下:

 1. bool error_log ( string message [, int message_type  [, string destination [, string extra_headers]]] )  

#此函數會送出錯誤訊息到Web伺服器的錯誤日誌檔案、某個TCP伺服器或到指定檔案中。此函數執行成功則傳回TRUE,失敗則傳回FALSE。第一個參數 message 是必選項,即為要送出的錯誤訊息。如果僅使用此參數,則會依設定檔php.ini中所設定的位置處傳送訊息。第二個參數message_type為整數值:0表示送到作業系統的日誌中;1則使用PHP的Mail()函數,傳送訊息到某E-mail處,第四個參數extra_headers也會用到;2則將錯誤訊息送到TCP 伺服器中,此時第三個參數destination表示目的地IP及Port;3則將訊息儲存到檔案destination。


如果以登入Oracle資料庫出現問題的處理為例,函數的使用如下所示: 



##

1. <?php      
2.     if(!Ora_Logon($username, $password)){     
 3.         error_log("Oracle数据库不可用!", 0);        //将错误消息写入到操作系统日志中   
4.     }   
5.     if(!($foo=allocate_new_foo()){   
6.         error_log("出现*烦了!", 1, ". mydomain.com");   //发送到管理员邮箱中   
7.     }  
8.     error_log("搞砸了!",   2,   "localhost:5000");     //发送到本机对应5000端口的服务器中   
9.     error_log("搞砸了!",   3,   "/usr/local/errors.log");  //发送到指定的文件中   
10. ?>


 


2、錯誤訊息記錄到作業系統的日誌裡


錯誤訊息記錄到作業系統的日誌裡錯誤訊息記錄到作業系統的日誌裡錯誤訊息記錄到作業系統的日誌裡錯誤報告也可以被記錄到作業系統日誌裡,但不同的作業系統之間的日誌管理有點區別。在Linux上錯誤語句將送到syslog,而在Windows上錯誤將傳送到事件日誌裡。如果你不熟悉syslog,起碼要知 道它是基於UNIX的日誌工具,它提供了一個API來記錄與系統和應用程式執行有關的訊息。 Windows事件日誌實際上與UNIX的syslog相同, 這些日誌通常可以透過事件檢視器來查看。如果希望將錯誤報告寫到作業系統的日誌裡,可以在設定檔中將error_log指令的值設為syslog。


具體需要在php.ini中修改的設定指令如下所示: 


#
1. error_reporting  =  E_ALL                   ;将会向PHP报告发生的每个错误   
2. display_errors = Off                            ;不显示 满足上条指令所定义规则的所有错误报告   
3. log_errors = On                             ;决定日志语句记录的位置   
4. log_errors_max_len = 1024                   ;设置每个日志项的最大长度   
5. error_log = syslog                          ;指定产生的错误报告写入操作系统的日志里




除了一般的錯誤輸出之外,PHP還允許向系統syslog中發送自訂的訊息。雖然透過前面介紹的error_log()函數,也可以向syslog中發送客製化的訊息,但在PHP中為這個特性提供了4個需要一起使用的專用函數。


#分別介紹如下: 


define_syslog_variables() 


在使用openlog()、syslog及closelog()三個函數之前必須先呼叫該函數。因為在呼叫函數時,它會根據現在的系統環境為下面三個函數初步使用化一些必需的常數。 


openlog() 


開啟一個和目前系統中日誌器的連接,為向系統插入日誌訊息做好準備。並將提供的第一個字串參數插入到每個日誌訊息中,該函數還需要指定兩個將在日誌上下文中使用的參數,可以參考官方文件使用。 


 syslog()


此 函數傳送一個客製化訊息給系統日誌。需要兩個必選參數,第一個參數透過指定一個常數自訂訊息的優先順序。例如LOG_WARNING表示一般的警 告,LOG_EMERG表示嚴重地可以預示著系統崩潰的問題,一些其他的表示嚴重程度的常數可以參考官方文件使用。第二個參數則是傳送給系統日誌的客製化 訊息,需要提供一個訊息字串,也可以是PHP引擎在運作時提供的錯誤字串。 


closelog()


函數在向系統日誌中發送完成自訂訊息以後調用,關閉openlog()函數開啟的日誌連線。


 


如果在設定檔中,已經開啟向syslog發送自訂訊息的指令,就可以使用前面介紹的四個函數傳送一個警告訊息到系統日誌中,並透過系統中的syslog解析工具,查看和分析由PHP程式發送的自訂訊息,如下所示: 


1.  
2.     define_syslog_variables();   
3.     openlog("PHP5", LOG_PID , LOG_USER);   
4.     syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s"));  
5.     closelog();   
6. ?>

 以Windows系統為例,透過右鍵"我的電腦"選擇管理選項,然後到系統工具選單中,選擇事件檢視器,再找到應用程式選項,就可以看到我們自己自訂的警告訊息了。上面這段程式碼會在系統的syslog檔案中,產生類似下面的訊息,是事件的一部分: 


      1. PHP5[3084], 警告報告傳送給syslog發送的示範,警告時間:2009/03/26 04:09:11.  


使用指定的檔案還是使用syslog記錄錯誤日誌,取決於你所在的Web伺服器環境。如果你可以控制Web伺服器,使用syslog是最理想的,因為你能利 用syslog的解析工具來檢視和分析日誌。但如果你的網站在共享伺服器的虛擬主機中運行,就只有使用單獨的文字檔案記錄錯誤日誌了。
           

相關建議:

php輸出所有時區清單

php 寫入日誌函數

php實作一個日誌功能

以上是php輸出日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn