2010-11-11 26 views
12

在我的工作場所,我們寫了一個自定義log4j appender,它將日誌消息寫入數據庫(異步使用專用線程,所以沒有性能問題)。 我比寫日誌文件更喜歡它 - 基於數據庫的日誌更容易查詢和分析。Java的一個很好的數據庫日誌appender?

有沒有一個開放源代碼的解決方案,這樣做(專門用於log4j或任何其他Java記錄器)?

我們的appender有一些東西,我想在替代看到:

  • 日誌異常(!咄)
  • 數據庫寫入是從一個單獨的線程/池

我們的appender支持以下列,我希望看到所有的解決方案。

  • LOGID
  • 時間
  • 消息
  • 堆棧跟蹤
  • 進程ID
  • 線程ID
  • 機器名
  • 組件
  • 級別(調試/信息/警告/。 ..)
  • ThreadName

回答

0

你並不需要一個定製的appender爲LOG4J寫入到數據庫。您可以使用捆綁在Apache發行版上的JDBCAppender。根據APACHE的文檔,這個API將來可能會被替換。但現在,我們使用它,它工作得很好。

+0

它在文檔中用紅色表示它不會記錄異常! – ripper234 2010-11-11 21:13:29

+0

@ ripper234:我知道。你沒有指定你需要記錄異常,但是... :-) – 2010-11-11 21:27:47

+3

來吧,認真... – ripper234 2010-11-11 21:29:27

2

還有一個由log4j提供的DBAppender類(log4j需要一組特定的表來記錄使用這個appender)。 http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

有一個更新的非Apache的JDBC記錄儀可在這裏您還可以試試: http://www.dankomannhaupt.de/projects/index.html

+0

它是否回答(修訂)的要求? – ripper234 2010-11-12 13:35:59

+0

以下是appender的來源:http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view =標記 – Scott 2010-11-12 16:42:49

+0

如果將DBAppender定義嵌套在RewriteAppender中,進程ID和機器名稱可以作爲屬性傳遞。 RewriteAppender允許您在將事件傳遞給嵌套appender之前,通過RewritePolicy修改記錄事件。請參閱:http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender。html和http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott 2010-11-12 16:45:16

1

只是好奇,是不是嚴重影響舉辦這樣的appender的應用程序的性能?直接登錄到關係數據庫中,即使在異步執行時也是非常昂貴的。

+0

好吧,如果你打開DEBUG消息,它可能會影響性能。儘管如此,我們還是分批進行,所以除非您真的每秒抽出數百條日誌消息,否則對性能的影響並不大。 – ripper234 2010-11-13 08:14:22

+0

是的,我是這麼認爲的。但請注意,堆棧軌跡可能很大。如果你的應用程序專門用於日誌管理 - 直接提交到數據庫是好的,但如果它應該做真正的工作,數據庫層的麻煩似乎不是一個可擴展的方法恕我直言。我不認爲有一個像你問的開源的appender,沒有看到一個。有一次名爲JDBCAppender的東西,但看起來並不嚴重。如果你想研究一個商業產品 - 看看登錄界面,它確實做到了這一點,但是在更廣的範圍內,完全將應用程序和日誌管理分離開來。 – Dima 2010-11-13 09:01:03

+0

過去三年,我們在中等規模的系統(約20臺機器)中使用了這種方法。假設你的數據層「足夠可擴展」,並且你不會輸出太多的日誌消息(通常是INFO&以上),我發現這些優點大於弊。 – ripper234 2011-01-05 05:22:03