2010-11-02 84 views
5

我有一個日誌文件,並希望創建一個網頁(可能是Python,但不是嚴格意義上的),它的工作原理與unix「tail -f filename」命令一樣(在寫入文件時顯示新的日誌行)。「tail -f filename」的Web實現?

因此,用戶將持續在瀏覽器中看到正確的日誌。

你將如何實現這一點?

回答

0

您讀取該文件並將最後一行輸出到頁面。您也可以使用GET變量來定義使用?n = x輸出的行數,其中x是行數。

+0

如何使它自動uOdated? – 2017-06-03 03:36:05

8

Tailon是一個python web應用程序,除其他外,它提供tail -f類似的功能。此外,wtee(tailon的姊妹項目),可以使所有的標準輸入在瀏覽器上查看 - 它的使用是相同的UNIX tee命令:

+0

試試http://rtail.org和https://github.com/mthenw/frontail – Synox 2017-01-25 20:40:40

0

我實現了這個使用jQuery(阿賈克斯)和PHP(JSON) 。

的流動基本上如下:

  • 用戶在他們的瀏覽器調用一個HTML頁面
  • HTML頁面包含一個初始的jQuery阿賈克斯調用遠程PHP腳本所需的執行服務器上函數,在這種情況下,檢索文件的最後幾行是'tailed'
  • 如果沒有新行可用,php腳本只是循環(wile ajax調用者等待,即longpolling),並且可以配置如果需要超時(將適當的值返回給ajax調用函數o客戶端)
  • 當PHP腳本檢測到新行時,它們被封裝在一個json響應中,併發送回瀏覽器的ajax調用函數,然後將其附加到頁面的現有內容中。
  • 然後,javascript函數將遞歸地進行相同的ajax調用,並有效地坐在無限循環中。

在我的具體實施中,我做了以下內容:

  • 在客戶端上的Ajax調用服務器上的PHP腳本有超時處理,例如,斷開的連接很好。也確保ajax調用不會永遠等待。
  • ajax調用將一個行號作爲參考返回給服務器,告訴它它收到的是最後一行號碼,所以服務器知道要返回哪一行。最初的值爲零,服務器將立即返回文件的最後10行
  • 當php腳本被調用時,它使用客戶端的最後一行號對文件進行快速檢查;如果已經添加了新行,它會立即返回它們,如果不是,它會在一個循環中(1秒),然後檢查文件ctime(或mtime)以檢測何時寫入新行。這比每秒計算文件中的行數(可能很大)更有效。

使用jQuery和PHP看到我longpolling /實時尾執行: https://github.com/richardvk/web_file_tail

1

Scullog,具有共享本地驅動器到瀏覽器的能力。通過瀏覽器通過Socket.IO流式傳輸日誌文件。它運行在任何平臺上,例如windows/linux/mac。它作爲服務或獨立模式運行。

+0

這應該是被接受的答案。完美的工作。感謝您的支持。 – 2017-06-07 09:51:54