在 Python 中解析日誌檔案

Vaibhav Vaibhav 2022年5月17日
在 Python 中解析日誌檔案

日誌檔案包含有關在軟體系統或應用程式執行期間發生的事件的資訊。這些事件包括錯誤、使用者提出的請求、Bug 等。開發人員可以進一步掃描這些使用細節,以找出系統潛在的問題,實施更新更好的解決方案,並改進整體設計。日誌檔案可以揭示很多關於系統安全性的資訊,這有助於開發人員改進系統或應用程式。

通常,日誌檔案中的條目具有格式或模式。例如,一個軟體系統可以有一個列印三樣東西的格式:時間戳、日誌訊息和訊息型別。出於可讀性和管理目的,這些格式可以在格式良好的文字中包含任意數量的資訊。

要對這些日誌檔案進行分析,可以考慮使用任何程式語言。但是本文將專門討論如何使用 Python 解析此類日誌檔案。儘管如此,該過程背後的理論對於所有程式語言都是相同的。人們可以輕鬆地將 Python 程式碼轉換為任何其他程式語言來執行所需的任務。

在 Python 中解析日誌檔案

如上所述,日誌檔案中的條目具有特定格式。這意味著我們可以利用這種格式逐行解析寫入日誌檔案中的資訊。讓我們試著用一個例子來理解這一點。

考慮以下用於 Web 應用程式的日誌格式。它有四個重要的細節,即日期和時間或時間戳(yyyy-mm-dd hh:mm:ss 格式)、訪問的 URL、日誌訊息的型別(成功、錯誤等) ,以及日誌訊息。

DateTime | URL | Log - Type | Log

現在,考慮包含上述格式的日誌的檔案 log.txtlog.txt 檔案看起來像這樣。

2021-10-26 10:26:44 | https://website.com/home | SUCCESS | Message
2021-10-26 10:26:54 | https://website.com/about | SUCCESS | Message
2021-10-26 10:27:01 | https://website.com/page | ERROR | Message
2021-10-26 10:27:03 | https://website.com/user/me | SUCCESS | Message
2021-10-26 10:27:04 | https://website.com/settings/ | ERROR | Message
...

以下 Python 程式碼將讀取此日誌檔案並將資訊儲存在字典中。變數 order 以與單個日誌相同的順序儲存所有字典鍵。由於日誌形式有一個|,我們可以使用它來將日誌字串拆分為元素並進一步儲存我們喜歡的元素。

import json

file_name = "log.txt"
file = open(file_name, "r")
data = []
order = ["date", "url", "type", "message"]

for line in file.readlines():
    details = line.split("|")
    details = [x.strip() for x in details]
    structure = {key: value for key, value in zip(order, details)}
    data.append(structure)

for entry in data:
    print(json.dumps(entry, indent=4))

輸出

{
    "date": "2021-10-20 10:26:44",
    "url": "https://website.com/home",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:26:54",
    "url": "https://website.com/about",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:01",
    "url": "https://website.com/page",
    "type": "ERROR",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:03",
    "url": "https://website.com/user/me",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:04",
    "url": "https://website.com/settings/",
    "type": "ERROR",
    "message": "Message",
}

讀取資訊後,我們可以對其執行任何進一步的操作。我們可以將其儲存在資料庫中以供將來分析,匯入 NumPyMatplotlib 並繪製一些圖形以圖形方式理解資訊。過濾帶有 ERROR 標籤的日誌並掃描使用者面臨的錯誤,或者注意一些可疑活動或安全漏洞,例如垃圾郵件或未經授權的訪問。機會是無窮無盡的,這取決於開發人員或資料科學家正在嘗試從獲得的資料中學習什麼。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.