2016-11-10 51 views
0

到文件就像在Python中,我們可以把command line日誌文件,而不是使用此命令console寫PHP命令行登錄的Python

python script.py >> mylogfile.txt 

我如何使用PHP做什麼呢?我試過

php script.php >> mylogfile.txt 

但它不起作用。

僅供參考,它可能會有所幫助,我使用的是Windows 10

+0

什麼不行?向我們顯示錯誤和您正在運行的腳本(MVCE) –

回答

0

終於找到了答案。它基於這篇文章:https://www.sitepoint.com/php-command-line-1-2/

我第一次使用php script.php > mylog.txt它將一些日誌文本返回到控制檯,所以我認爲它不寫入日誌,但它確實。我想要想要php script.php > mylog.txt 2>&1這將把任何日誌的文件。

該文章說,它不適用於Windows,但我使用Windows 10,它的工作原理。

與以前一樣,錯誤消息與正常輸出混合在一起。但是, 管道從腳本的輸出,我可以從 正常輸出拆分錯誤:

$ php outwitherrors.php 2> errors.log

這個時候,你只看到這些消息:

打開文件foobar的.log作業已完成

但是,如果您查看運行腳本的目錄,將創建一個名爲errors.log的新文件,其中包含t他錯誤 消息。數字2是用於標識 STDERR的命令行句柄。請注意,1是STDOUT的句柄,而0是 STDERR的句柄。使用命令行中的>符號,可以將 輸出指向特定位置。

雖然這可能看起來並不令人興奮,但它對於系統管理來說是一個非常方便的工具。一個簡單的應用程序,從 的cron運行一些腳本,將以下內容:

$ php outwitherrors.php >> transaction.log 2>> errors.log 

使用「>>」,我告訴終端新消息附加到現有 日誌(而不是覆蓋)。正常的操作消息是 現在記錄到transaction.log,我可能每月會仔細閱讀一次,只需 檢查一切正常。同時,任何需要更快響應的錯誤最終都會以errors.log結尾,其中一些其他cron作業可能會按需要每天(或更頻繁)通過電子郵件向我發送電子郵件。

UNIX和Windows命令行之間有一個區別, 當涉及到管道輸出時,您應該知道這一點。在UNIX上, 可以合併輸出和錯誤流傳輸到單個目標, 例如:

$ php outwitherrors.php > everything.log 2>&1 

這樣做是重新路由STDERR到STDOUT,它意味着獲得 寫入日誌文件everything.log。