2012-03-14 37 views
3

我想將我的java日誌條目分組,以便更容易搜索。 我的意思是有下一個日誌記錄:如何將java日誌條目分組?

14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: Start ACME operation 
14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: step 1 - do something 
... 
14-Mar-2012 14:29:07 com.acme.service.AcmeService log 
INFO: End ACME operation 

這些記錄屬於彼此因爲這些是工作流的步驟(例如,我想跟蹤一個web服務的處理)。 是否有一個好的設計模式可以將這些記錄放在一起,以便我可以輕鬆找到web服務請求的日誌? (例如,在所有日誌條目的開頭放入一個ID)? 有沒有可以通過自動分組顯示這些日誌的工具?像log4j電鋸,但通過這個ID組合在一起? 謝謝!

回答

2

你爲什麼不擴大級別,並添加自己的自定義級別(或多個)。您的所有Web服務日誌都可以在該級別完成。

一旦你有你自己的水平,你可以自定義它是如何記錄包括記錄到不同的文件等

+0

嗨布魯斯曼,謝謝!我從來沒有擴展過Log類,它不會破壞我的日誌文件嗎? 您認爲是否有任何GUI工具可以很好地顯示這些分組日誌?例如:INFO AcmeService 384d63gd33 +(奇怪的數字想成爲標識符)並點擊標誌+我們將獲得屬於給定請求的所有日誌。 – Viktor 2012-03-15 15:52:49

+0

它不會破壞你的日誌文件。 我不知道用於分組日誌的GUI工具,但是如果您想通過日誌搜索特定內容並將它們一起顯示,則可以使用grep(linux環境或在Windows上使用git bash) – bluesman 2012-03-16 14:40:38

+0

再次感謝!我的問題是我必須記錄包含更多行(例如SOAP請求)的數據,並且此數據屬於日誌條目,因此我必須將它們一起處理並顯示出來......我不知道如何才能做到這一點grep的。我也不知道,因爲我不是一個大的Linux專家。 :) – Viktor 2012-03-16 17:13:57

0

如果您在春季技術方面的工作,你可以輕鬆地配置Spring集成模塊接收日誌中的信道,使用路由器和使用出站適配器將它們保存到數據庫拆分他們的類型。許多接線開箱即用,你只需要做最少的編碼。

http://www.springsource.org/spring-integration#documentation

+0

感謝您的回答,我會檢查它,但可惜我不是在春天的環境中工作。 – Viktor 2012-03-15 15:34:57

4

是否使用在你的web應用的會話?如果是這樣,您可以使用會話ID區分請求。

對不起,剛剛從看着你的榜樣,我認爲你正在使用的java.util.logging實現。以下僅適用於log4j。我現在好奇,看看是否有人有修復因此我也想知道。根據我的經驗,我發現log4j非常容易使用和配置。

Log4j的解決方案

通過所有通過過濾器的請求,然後使用NDC.push(id)。然後在您的模式中使用%x輸出到文件。

+0

謝謝你的回答!不幸的是,我們必須使用的java.util.logging ... :(你覺得是否有任何GUI工具顯示這些精美的分組日誌 例如:信息AcmeService 384d63gd33 + (怪異的數量想當標識符)點擊標誌+我們會得到屬於給定請求的所有日誌,或者我太理想化了嗎?:) – Viktor 2012-03-15 15:28:45

+0

可能有一個工具可以做到這一點,但我不知道其中一個,對不起。我需要對j.u.l中的標識符進行另一次破解。我自己在某一點,所以我會報告回來,如果我有任何成功。 – chooban 2012-03-15 17:18:29

+0

非常感謝。我正在考慮使用ThreadLocal將信息放入日誌標題中,以便我可以實現類似於NDC.push()的解決方案。 – Viktor 2012-03-16 17:15:49

0

您可以使用電鋸分析一個普通的文本日誌文件,不管是什麼日誌API來創建它。請參閱歡迎標籤中提供的示例receiver config xml中的LogFilePatternReceiver示例。

在您的例子,一旦您在您的日誌文件輸出的會話,您可以添加會話屬性,然後使用會話上色/排序和過濾。您還可以使用該會話ID作爲「記錄器」,並獲得記錄器樹專注於單個記錄器的能力,從本質上爲您提供「分組」行爲。

+0

感謝您的回覆!我的問題是我有多行日誌條目,所以我可以將日誌條目(和日誌文件中的行)作爲記錄來處理。我認爲命令agrep會適合我。我正在使用java.util日誌記錄。 – Viktor 2012-03-20 11:37:44

+0

看起來這是java.util.logging的常見佈局。我將更新LogFilePatternReceiver以支持日誌格式的多行。 – Scott 2012-03-20 17:59:46