簡體   English   中英

通過將用戶的操作記錄到Django中的數據庫來跟蹤用戶的請求

[英]Tracing requests of users by logging their actions to DB in django

我想通過在Django中將用戶的請求作為純文本記錄到數據庫中來跟蹤用戶在網站中的操作。

我考慮編寫一個自定義裝飾器,並將其放置在我要跟蹤的每個視圖中。 但是,我在設計中遇到了一些麻煩。 首先,這種日志記錄機制是合理的還是由於我的日志表將迅速擴大而引起一些性能問題? 其次,我的日志表應如何設計?

如果用戶調用search視圖,我想保留關鍵字;如果用戶調用details of item視圖的details of item我想保留項目的ID。 此外,應該保留用戶的IP地址,但是像許多公司一樣,如果用戶通過單個IP地址進行連接,如何分隔用戶。

如果您認為我的問題不清楚,我很高興詳細解釋。

謝謝

我不會那樣做。 如果這是一項生產服務,那么您將在其前面運行適當的Web服務器,對嗎? Apache或nginx之類的東西。 這樣既可以做日志,也可以做得很好,並且可以寫成不會膨脹數據庫的表格,並且有很多用於日志分析的分析工具。

您將不得不在裝飾器中復制很多該功能,例如,當您想要打開或關閉它或更改日志級別時。 在django中完成所有操作后,您獲得的唯一結果就是可以進行超精細控制,例如僅記錄ID編號大於X或類似值的博客帖子的視圖。 但是通常您不希望有如此詳細的信息,並且會記錄所有內容並在分析階段進行任何剝離。 目前您還沒有給出任何需要從Django執行此操作的原因。

如果您真的想在RDBMS中使用它,則將Apache日志文件讀入Postgres或MySQL或那些昂貴的文件中的一個是微不足道的。

您應該記住的一件事是,SQL數據庫無法為您提供很好的寫性能(與閱讀相比),因此,如果您遇到重負載,則可能應該尋找一種更好的內存解決方案(例如,一些內存解決方案)。鍵值存儲,例如redis )。

但請記住,特別是如果您使用非SQL解決方案,則應了解要對收集的數據進行什么處理(只需顯示類似“日志”之類的內容,或在其中進行一些深入的搜索/查詢)數據)。

如果要從同一IP地址識別不同的用戶,則可能應該尋找基於cookie的解決方案(如果您使用的是django的會話框架 ,則默認情況下將通過cookie標識會話的會話-因此,您只需使用會話即可)。 另一種解決方案可能是在頁面加載到瀏覽器之后通過javascript“異步”進行日志記錄(這可以為您提供更多標識用戶的可能性,並避免在生成頁面時增加負載)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM