首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 讀取用戶登入登出日誌並上傳服務端完整實現

     編輯:Java 相關知識

Java 讀取用戶登入登出日誌並上傳服務端完整實現

客戶端運行於提供 Unix 服務的伺服器,負責讀取系統 wtmpx 日誌,解析用戶登入/登出記錄,配對生成完整會話日誌,經 Socket 上傳至服務端匯總存儲。

架構設計

  • DMSClient:解析日誌 → 配對會話 → 發送服務端
  • DMSServer:多線程接收客戶端日誌 → 持久化存儲
  • 配置文件驅動:config.xml (客戶端)、server-config.xml (服務端)
  • 核心工具類:IOUtil (文件/二進制讀寫)、LogData/LogRec (業務實體)

核心流程 (客戶端)

  1. 解析日誌:RandomAccessFile 讀取二進制 wtmpx,按固定長度解析 user、pid、type(7登入/8登出)、time、host,寫入文本文件 log.txt,記錄書簽位置 last-position.txt。
  2. 配對會話:讀取新日誌 + 未配對舊日誌,按 user+pid 匹配 type 7/8 生成 LogRec,寫入 logrec.txt,未配對寫入 login.txt。
  3. 發送日誌:Socket 連接服務端,逐行發送 logrec.txt 內容,結束發送 OVER,收到 OK 刪除本地文件。

服務端處理

  • 固定線程池 (Executors.newFixedThreadPool) 處理客戶端連接。
  • 專用線程 SaveLogHandler 從阻塞隊列消費日誌寫入 server-logs.txt。
  • 協議:客戶端逐行發送 → 發送 OVER → 服務端回 OK/ERROR。

關鍵配置範例

config.xml (客戶端)

<config>
  <logfile>wtmpx</logfile>
  <textlogfile>log.txt</textlogfile>
  <lastpositionfile>last-position.txt</lastpositionfile>
  <batch>10</batch>
  <logrecfile>logrec.txt</logrecfile>
  <loginlogfile>login.txt</loginlogfile>
  <serverhost>localhost</serverhost>
  <serverport>8088</serverport>
</config>

server-config.xml (服務端)

<config>
  <logrecfile>server-logs.txt</logrecfile>
  <threadsum>30</threadsum>
  <serverport>8088</serverport>
</config>

技術亮點

  • 二進制日誌定長解析 + RandomAccessFile 隨機讀取 + 書簽機制斷點續傳。
  • 雙 Map (loginMap/logoutMap) O(N) 配對算法。
  • 生產者-消費者模式 (BlockingQueue) 解耦接收與落盤。
  • DOM4J 解析 XML 配置,靈活部署。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved