2009-06-28 322 views
10

我一直在服務器上工作,我開始實現日誌記錄。但是,我不確定我是應該使用數據庫進行日誌記錄,還是隻使用純文本文件。服務器日誌記錄 - 在數據庫或日誌文件?

我打算登錄的一些基本信息,每一個請求(什麼類型的請求,請求IP地址,會話跟蹤)。對於某些請求,會有擴展的信息(詳細說明請求的類型),如果有任何錯誤,我也會記錄這些信息。

,一方面,把登錄到數據庫意味着我可以運行查詢的日誌數據。另一方面,我不確定這是否會給db帶來不必要的壓力。當然,我也可以使用db和日誌文件進行日誌記錄。人們對正確採伐的想法是什麼?

(如果它的確與衆不同,我使用了mod_python與MySQL數據庫Apache服務器上。所以我既可以使用logging庫或只是創造的分貝一些記錄表格。)

+1

你可以只去的地方在使用SQLite之間:「旨在取代fopen()函數」,作爲開發商說。 – 2009-06-28 22:35:16

回答

10

首先,使用像SLF4J/Logback這樣的日誌庫,允許您動態地作出此決定。然後,您可以調整配置文件並將部分或全部日誌消息路由到幾個不同目標中的每一個。

要登錄到您的應用程序數據庫之前非常小心,你可以很容易壓倒它,如果你記錄了很多的東西和數量開始變高。而且,如果您的應用程序運行接近全容量或處於故障模式,那麼日誌消息可能無法訪問,您將會盲目失明。應用程序數據庫的唯一消息可能是高級別的面向應用程序的事件(一種應用程序數據)。

「登錄到文件系統」(對於大型生產環境包括登錄到冗餘日誌聚合服務器讀取的多播地址)要好得多。

可以將日誌文件讀入特殊的分析數據庫,您可以在其中使用例如Hadoop來對日誌數據進行映射/減少分析。

+1

登錄到像splunk這樣的系統日誌服務器,它支持多種日誌格式,你可以在那裏創建數據庫日誌以及http服務器,然後你可以交叉引用一個很好用的gui。 確保你使用的是異步日誌記錄(log4j,我敢打賭許多其他人有這樣的appender)。 – feniix 2010-02-27 02:34:11

1

我們一直將數據記錄到單獨的數據庫。

這可以讓我們在不影響應用程序數據庫的情況下進行查詢。如果我們意識到我們需要禁用日誌記錄或更改記錄的數量,它也會簡化事情。

但最現代化的日誌庫支持嵌入登錄到您的應用程序並選擇由配置目的地 - 文件,數據庫,等等。

Logger爲您提供了許多管理日誌記錄的方法,雖然默認包沒有數據庫記錄器,但編寫這樣的事件處理器並不困難。

2

Mix file.log + db會是最好的。 登錄到最終可能需要分析的db信息,例如每天的平均用戶數量等 並使用file.log存儲一些調試信息。

1

如果你決定這是一個解析的日誌文件的格式,那麼你可以登錄到一個文件,然後有處理您的日誌文件,並插入細節到你的數據庫的外部進程(可能由cron運行)。這可以安排在您的應用程序和數據庫負載較低的時候發生。

我總是擔心,如果數據庫變得不可用,發生了什麼:這會阻止你的應用程序的運行,或以任何方式降低了嗎?記錄到文件系統避免了必須處理該問題,但是您仍然需要擔心磁盤填滿和記錄文件輪換。

1

只有在產生收益時才登錄數據庫。

例如,對於一個網站,我們將放置在網站中的所有廣告記錄到數據庫中。它產生了收入。沒有理由爲重要的事情解析日誌文件。

其他一切都進入文件系統。

登錄到文件系統進行調試。這通常是私人的東西。實施細節。不被分享。

Apache將一堆東西記錄到文件系統中。不要重複這個。

訪問控制日誌轉到文件系統。你很少想看到這些細節。

用戶活動可能必須彙總到數據庫中。這是您需要研究的營銷和可用性信息,以改善您的網站。但是,詳細的活動信息太龐大,無法記錄在數據庫中。將其放在文件系統上並將其消化到市場/產品改進/可用性分析數據庫。

0

萬一你考慮調整標準Python記錄器記錄到數據庫中,這個配方可能會給你一個良好的開端:Logging to a Jabber account

0

我主要使用文件系統日誌記錄,就像大多數其他答案一樣。使用Python的日誌記錄軟件包,您可以通過修改here的建議來輕鬆創建數據庫處理程序。您還可以創建自定義Filter實例並將其附加到數據庫處理程序 - 這將允許您在運行時確切確定您實際登錄到數據庫的哪些事件。根據其他答案,我會說真的值得將某些類型的事件記錄到數據庫中供以後分析。

如果您的主應用程序是高吞吐量的,我會同意建議登錄到單獨的數據庫(在單獨的服務器上)。

0

日誌記錄的類型取決於您要如何處理數據以及如何執行此操作。如果您要基於此日誌數據庫構建報告系統,則記錄到數據庫是有利的。否則,如果您想利用數據進行某些分析,則可以使用特定的格式記錄日後可以解析的內容。例如,從文件日誌中,只需要解析所需的信息並根據需要生成CSV。如果你打算使用數據庫記錄器,如已經建議的那樣,將它與應用程序數據庫分開。其次,您可以考慮讓記錄器獨立於主應用程序。產生一個執行日誌記錄的線程,或者在特定的端口/套接字上運行一個日誌記錄器,並將日誌消息傳遞給它,或者收集所有日誌消息並在每個週期結束時將其清除到日誌中。

0

我們都做。

我們記錄操作信息/進度/等。到日誌文件。標準日誌文件的東西。

在數據庫中,我們記錄了操作的狀態。例如。每個項目的處理,所以我們可以做吞吐量/經過時間/等查詢。當趨勢和檢測異常(系統「太安靜」等)時,這些數據特別有用,這可能表明其他問題。

0

事實上,你可以在以後DB /文件記錄之間切換似乎很重要。數據庫日誌記錄似乎比純文本文件日誌記錄要慢很多,這對於高日誌流量可能變得很重要。 當我有相同的需求時,我創建了一個庫(可以獨立或作爲處理程序)。它記錄到數據庫和/或文件,並允許歸檔關鍵消息(和存檔可以,例如,當一切都成文本文件是數據庫)。 它可以節省您的編碼從頭開始一個又一個...... 請參閱:The rrlog library

0

看起來很多人都記錄一些事件對數據庫的訪問。我也是這樣做的,但是增加了一些延遲。你們有沒有通過消息隊列登錄到數據庫?如果是這樣,你用什麼排隊,什麼是你的日誌架構?我正在使用Java/J2EE。

相關問題