正式環境的log
因為分散式系統的關係
通常都會使用ELK來做視覺化的查詢

不過測試環境的Log
有時候會因為公司機器架構的關係
沒有使用ELK
需要直接進入機器查看Log

每次查看linux的測試環境Log
雖然沒有到痛不欲生
但總是覺得不勝其擾

後來聽同事分享
才知道有辦法不用透過ELK
直接在網頁瀏覽log

因為linux通常都會安裝python
又python有一個功能為SimpleHTTPServer
所以只要在linux的log根目錄
執行python指令

1
2
3
4
5
# python2
python -m SimpleHTTPServer

# python3
python -m http.server

就可以在 http://localhost:8000
用網頁瀏覽資料夾裡面的內容
python1

不過實際狀況當然沒有那麼單純
還會遇到中文亂碼
Port號被占用
log檔案預設為下載等等問題
所以必須調整一下HTTPServer的內容

python2語法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#myserver-phthon2.py
import SimpleHTTPServer
import SocketServer

class InlineHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def end_headers(self):
is_file = not self.path.endswith("/")
if is_file:
self.send_header("Content-Disposition", "inline")
self.send_header("Content-Type", "text/html; charset=utf-8")
SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)


handler = InlineHandler
httpd = SocketServer.TCPServer(("", 7999), handler)

print("Serving on port 7999")
httpd.serve_forever()

python3語法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#myserver-phthon3.py
import http.server
import socketserver

class InlineHandler(http.server.SimpleHTTPRequestHandler):
def end_headers(self):
is_file = not self.path.endswith("/")
if is_file:
self.send_header("Content-Disposition", "inline")
self.send_header("Content-Type", "text/html; charset=utf-8")
super().end_headers()

handler = InlineHandler
httpd = socketserver.TCPServer(("", 8001), handler)
print("Serving on port 8001")

httpd.serve_forever()

然後使用python執行自定義的.py
就可以正常瀏覽Log了
記得執行指令前
使用sudo,避免沒有權限瀏覽Log檔案
python2