2014-08-27 127 views
4

我的瞭解rsyslog是它是在Ubuntu機器上常見的syslog服務器實現。Java到rsyslog:STDOUT或syslog?

Futhermore,我的理解rsyslog可以用來鉤/捕獲STDOUT輸出以及標準syslog消息。

最後,我瞭解rsyslog可以再往前任何捕捉消息(再次,無論是從STDOUT未來或syslog客戶端)到另一臺服務器,如日誌聚合,或其他rsyslog服務器等。

所以第一關,如果什麼我上面已經指出不正確,請糾正我如何syslog/rsyslog工作的理解和他們彼此之間的關係開始了!

如果我的假設都或多或少正確的,那麼考慮到以下兩個選項:

  • 選項#1:登錄到STDOUT和配置rsyslog來捕獲流和轉發日誌消息發送到遠程進程(說一個日誌聚合器);或
  • 選項#2:登錄到syslog和配置rsyslog捕捉到它並轉發日誌消息相同的遠程過程

鑑於這兩個選項,我寧願#1,因爲:

  • 當本地或從IDE運行時,STDOUT將打印到控制檯;和
  • 任何非本地的環境中運行時,STDOUT只會得到「收集」的rsyslog

如果我選擇#2去,在本地運行,當我失去控制檯的知名度。

話雖如此,登錄到STDOUT是否有任何安全/性能/其他問題/警告/陷阱,使選項#2更具吸引力/可取?如果是的話,他們是什麼?

回答

4

您應該使用其中一個記錄器(即java.util.logging等),然後根據每個用例對其進行配置。對於本地測試,將記錄器配置爲STDOUT。對於生產,請將其配置爲syslog。

通過簡單地記錄STDOUT,您將失去由記錄器提供的任何元數據,或可能由syslog使用,因爲您可以記錄的只是消息。

例如,在Glassfish中,運行到STDOUT的任何內容都將作爲INFO記錄到Glassfish日誌中。

因此,如果您將Log4j運行到STDOUT,則會捕獲日誌,但是您無法捕獲的是它們是WARN還是DEBUG或其他。作爲信息的一部分,TAG被捕獲,但與通過記錄器本身運行的信息相比,信息表面上看起來不透明。

如果您已配置Log4j以使用Glassfish記錄器(即java.util.logger),那麼Glassfish日誌將捕獲映射到Glassfish日誌系統的元信息(如級別)(例如Log4j DEBUG是jul FINE)。現在,日誌查看器可以訪問該數據並對其執行操作。

這就是爲什麼你不想只在可能的情況下登錄到標準輸出。最好登錄到更高級別的級別,讓後面的步驟決定如何呈現它並組織數據。

+0

Thanks @Will Hartung(+1) - 例如LogBack有一個'SyslogAppender',可以用來從Java進程登錄到'syslog'。我是否可以假設我需要配置'rsyslog'來捕獲這個'SyslogAppender'輸出並將其轉發到日誌聚合器?再次感謝! – DirtyMikeAndTheBoys 2014-08-27 20:37:22

+0

您只需配置rsyslog,因爲它可以從各種來源獲取數據,然後將SyslogAppender配置爲指向您的rsyslog服務器。如果rsyslog也想轉發,那就這樣吧。 SyslogAppender不在乎,rsyslog也不知道它從SyslogAppender獲取數據,只是「某事」 – 2014-08-27 20:41:05