2008-08-30 124 views
5

我想保留人們在我的應用程序中執行的某些操作的日誌,在某些情況下可以在需要時撤消它。登錄PHP webapp

是否最好將這些日誌存儲在文件或數據庫中?我完全不知道是什麼利弊,除了它是另一張表格。

是否有第三(或第四等)選項,我不知道我應該研究和了解?

回答

5

您幾乎可以肯定希望使用數據庫進行靈活的基於記錄的訪問,並利用數據庫處理併發數據訪問的能力。如果您需要跟蹤可能需要撤消的信息,那麼以結構化格式對其進行處理是一項好處,因爲它能夠更新指示某個交易何時取消以及由誰撤銷的行。

如果性能非常高,或者每個記錄的數據非常結構化或大量存儲在數據庫中,您可能只想寫入文件。請注意,除非您的應用程序具有非常大量的事務數據庫,否則速度不太可能成爲問題。還要注意,如果你正在處理一個文件,你需要非常小心地處理併發訪問(讀/寫/鎖),這可能不是你想要處理的事情。

2

我只是爲了可維護性而使用數據庫 - 對文件進行多次編輯可能會導致一些錯失。

1

我將繼續推薦上述兩項建議,並在平面文件日誌中添加文件鎖定時可能會導致出現大量用戶問題。

9

至少有一個明確的理由去存儲在數據庫中。您可以在MySQL中使用INSERT DELAYED(或其他數據庫中的類似構造),這會立即返回。這些類型的查詢不會從數據庫中獲得任何返回數據,並且不能保證應用。

通過使用INSERT DELAYED,您不會因爲日誌記錄而減慢應用程序的運行速度。數據庫隨時可以隨時將INSERT寫入磁盤,因此它可以將一組插入內容捆綁在一起。

您需要注意使用MySQL內置的timestamp函數(如CURRENT_TIMESTAMP或CUR_DATE()),因爲只要實際執行查詢,就會調用它們。所以你應該確保任何時間數據都是用你的編程語言生成的,而不是數據庫生成的。 (本段可能是MySQL特有)

+2

對我來說這是一個新的目標。很光滑。 – 2008-10-15 13:32:18

3

我的log4php忠實粉絲。它爲您提供了一個記錄操作的標準界面。它基於log4j。該庫加載一箇中央配置文件,所以你永遠不需要改變你的代碼來改變日誌記錄。它還提供了多個日誌目標,如文件,系統日誌,數據庫等。