2016-06-24 29 views
0

我需要記錄連接到我的服務器的用戶的活動,我應該使用log4j嗎?或者只有在開發階段纔有益於log4j?log4j等日誌工具是否僅在開發階段有用?

+0

僅供參考,而不是被鎖定到一個特定的日誌框架,你可以使用['SLF4J'(http://www.slf4j.org)日誌的外觀。您的代碼調用SLF4J接口方法,然後調用您所選擇的即插即用樣式的日誌框架。與['LogBack'](http://logback.qos.ch),Log4j,用於Java和Android的系統默認日誌記錄等等一起使用。 –

+0

儘管SLF4J鎖定了你。其API只支持日誌字符串,而不支持對象。它也會造成更多的垃圾。爲了充分利用即將到來的Log4j 2功能(如二進制日誌記錄),我建議在您的應用程序中使用Log4j 2 API。如果你改變主意,有一個log4j-to-slf4j適配器,所以你不會被鎖定。Disclosure:我是一個Log4j 2提交者。 –

回答

3

他們實際上沒有在開發過程中特別有用,是的System.out.println對於大多數開發調試日誌記錄還不錯,但一旦你部署以下能力變得非常有用:

  • 滾動日誌文件,使他們不會受到太大的允許連續免維護操作
  • 添加時間/日期,以便您可以查看特定時間段的日誌
  • 即時更改詳細信息(您並不總是希望跟蹤或調試信息,但可以在系統不可用時將其翻轉) t運行良好可以成爲救生員)
  • 將日誌文件重新路由到更易於訪問的地方... Log4j可以將日誌發送到各種數據庫或其他位置,以便當您無法直接到達服務器時。

我們的一些代碼在每個重要行上都有跟蹤語句。如果我們在開發過程中遇到問題,我們會將調試/跟蹤語句保留下來,並且在需要進行生產時能夠將它們打開 - 幾乎相當於通過部署代碼的單步執行。此外,大多數方法在頂部顯示跟蹤或調試語句,顯示傳入的參數和程序流程 - 對於調試器不可用的已部署系統而言,這種方法只有真正有用。

所以簡而言之,是的,它在開發後很有用。

編輯(回覆評論問題) -

只是一個例子。我正在處理的應用程序現在有20個日誌。一個是「性能」,它記錄包括時間在內的數據 - 有時每秒多於一行。這個日誌文件「Rolls」爲10mb(大約每小時),但我們用它來查找數據傳輸的滯後時間。我們甚至使用其他軟件來分析此日誌,有時會在數據計時中查找模式。

我們有一個單獨的「錯誤」日誌記錄所有錯誤級別的活動。這個日誌的速度並不快,當我們收到其他一些日誌信息時,我們會丟失數據。

還有另一個日誌把相關的問題到Hibernate/SQL和一個與我們的消息隊列和一個爲我們的應用程序內間高速緩存的問題....

這些都還組合成「主「通過log4j配置文件登錄。我們可以將任何一個日誌重新配置到不同的級別(例如,我們遇到了數據源的認證問題,所以我們調出了該源的調試級別以查明服務器環境中導致該問題的變化)

即使某些日誌在一小時內滾動10mb(我們的最大文件大小)。 Log4j將它們轉換爲.1和.2文件,以便我們可以根據需要保留其中的10-50個文件。

所有這些都是通過配置文件完成的,可以在部署後進行更改,而無需重新構建系統。

編輯2 - 另一個想法

有關使用的log4j和Java日誌接口的另一個有用的一點是,使用它像休眠文庫可以通過XML文件被配置無需重建。

沒有的Log4j/Java的日誌記錄API,你要麼A)有一個自定義的API來控制日誌,B),只有默認的日誌或C)都沒有從該子系統的日誌記錄。因爲Hibernate使用java的API,所以你可以在一個標準的XML文件中設置日誌級別的「Hibernate」日誌信息,甚至可以將它的日誌重新路由到數據庫或其他日誌設備。

+0

你能告訴記錄級別如何幫助嗎?我的意思是,即使採用不同的日誌記錄級別,最後我會將其視爲一個大日誌文件,對吧? – Tejas

+0

在正常操作下,您只希望看到亮點 - 錯誤/異常和一些高級處理事件(信息)。當你遇到問題時,你可以改變日誌級別(通過應用程序或者編輯配置文件)並獲取任何信息,例如(從上面的示例中)到「if」的方向或者傳入每個方法的參數。通常情況下,這些會將文件中的重要信息快速滾動。 –

+0

假設記錄儀在配置文件中設置爲「警告」,並且我正在使用「Info」級別進行記錄。現在我可以在將配置文件更改爲「信息」級別後看到以前的「信息」級日誌了嗎? – Tejas

0
  1. 是(或其他任何日誌框架/ SLF4J
  2. 沒有
1

日誌記錄對於定位生產性代碼中發生的錯誤特別有用。在開發過程中,您可以使用更強大的工具,如調試器。

當然你必須要知道,記錄潛在的影響性能,並能創造巨大的文件。這就是爲什麼像log4j這樣的工具可以配置爲打開和關閉日誌或控制其詳細程度。

這是確定使用log4j的,因爲它是Java中最常見的庫。不過,我個人認爲它的配置有點直觀。

+0

Log4j 1.2配置繁瑣且不直觀,但在Log4j 2中已大大改進。 –

1

使用Log4j等記錄器的另一個原因是爲不同的組件記錄級別。如果你爲所有事情開啓DEBUG,日誌可能變得非常大而且雜亂。如果您知道要在日誌中「放大」的代碼區域,您可以單獨調整該區域的日誌記錄。