2011-03-21 96 views
2

我正在使用MongoDB和Ruby(sinatra)應用程序。目前,所有日誌記錄都完成到本地文件。我寧願將日誌消息放入MongoDB集合中。做這個的最好方式是什麼?登錄到MongoDB集合(Ruby)

回答

1

有,不只是這一個開源項目:從文件

https://github.com/customink/central_logger

+0

文檔似乎暗示這是Rails的寶石,正如我在我的問題說,我沒有使用Rails。你有沒有在非Rails環境中使用它?如果是的話,多少黑客參與到它的工作? – 2011-03-22 01:49:02

1
  1. 加載數據。
  2. 將日誌插入到mongodb集合中(here詳細的ruby驅動程序tutolrial)。
  3. 在記錄數據而不是在文件中寫入的方法只是在mongodb集合中插入日誌。

另外capped collections很適合記錄等任務。

+0

沒問題。我需要知道如何在不重寫所有記錄行的情況下執行第3步? – 2011-03-22 22:00:20

1

當您使用MongoDB進行日誌記錄時,擔心寫入吞吐量過高。儘管默認情況下MongoDB的插入是默認情況下的fire-and-forget樣式,調用大量insert()會導致嚴重的寫入鎖爭用。這可能會影響應用程序性能,並阻止讀者聚合/篩選存儲的日誌。

一種解決方案可能使用日誌收集器框架,如FluentdLogstashFlume。這些守護進程應該在每個應用程序節點上啓動,並從應用程序進程獲取日誌。

Fluentd plus MongoDB

他們緩衝日誌和異步寫入數據至其他系統,如MongoDB的/ PostgreSQL的/等寫入分批進行,所以這是一個很大比直接從應用程序編寫效率更高。該鏈接描述瞭如何將日誌從Ruby程序放入Fluentd中。