簡體   English   中英

Log4j登錄到共享日志文件

[英]Log4j Logging to a Shared Log File

有沒有辦法將log4j日志記錄事件寫入也由其他應用程序寫入的日志文件。 其他應用程序可能是非Java應用程序。 有什么缺點? 鎖定問題? 格式化?

Log4j有一個SocketAppender,它將事件發送到服務,您可以自己實現或使用與Log4j捆綁的簡單實現。

它還支持syslogd和Windows事件日志,這可能有助於將日志輸出與來自非Java應用程序的事件統一起來。

如果性能完全是一個問題,那么您需要一個服務來編寫日志文件,而不是嘗試在不同的日志記錄應用程序之間協調一致的鎖定策略。

您最好的選擇可能是讓每個應用程序單獨記錄,然后根據時間將預定作業放在一起“拉鏈”文件。 如果您需要對完整日志進行真正的最新訪問,則可以每小時運行一次。

我有以下兩種方法的經驗:

  1. 使用數據庫進行日志記錄而不是純文本文件 - 由於性能問題,它可能會令人望而卻步,另一方面,分析日志,創建報告非常容易。 數據庫負責處理所有並發問題。
  2. 另一種方法涉及使用JBoss服務器,它可用於從其他來源讀取日志記錄信息。 JBoss可以在最小配置下運行,並且由於它非常輕巧(啟動時間為2秒)。 詳細信息可以在http://docs.jboss.org/process-guide/en/html/logging.html (登錄到單獨的服務器)中找到。 Log4J負責所有鎖定/並發問題。

如果您不打算使用JBoss,可以使用第二種方法作為您自己的日志記錄解決方案的基礎。

我不認為默認的log4j appender做任何文件鎖定或同步。 如果沒有這樣的鎖定,您可能會丟失日志消息或接收它們。

我不確定在Java中執行文件鎖定是多么容易,但為了直接使用,我認為你需要子類化相應的Appender並覆蓋日志記錄方法,用同步代碼包裝它來鎖定和解鎖文件。 這可能會影響性能,具體取決於您的系統負載。

Log4perl有一個同步的Appender,Log :: Log4perl :: Appender :: Synchronized,它包裝了一個Appender並完成了這個,並且似乎在它的Log :: Log4perl :: Appender :: File中提供了一個防止交錯行的標志。 您可以查看它們的作用,看它是否可以在Java中復制。

Log4j非常靈活,您可以使用與文件中已有的記錄兼容的格式創建日志條目。 只需查看appender,了解如何格式化特定數據字段。

您主要關注的是鎖定,最有可能是其他應用程序。 確保所有應用程序都沒有對文件的獨占鎖定,你應該沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM