我在服務器A上有一個REST服務。服務正在做一些東西並記錄一些消息,這要歸功於log4j。將日誌從REST服務發送到HTML頁面
另外,我有一個服務器B上的網頁,通過AJAX調用服務並獲得響應。除了接收到響應(對我來說工作正常)之外,我想在頁面上打印來自服務器端的日誌消息。
換句話說,我希望每當服務器A端有新的日誌消息時,視圖就會顯示它。
任何想法,以實現這一目標?
編輯: 如何使用websocket從log4j套接字appender檢索日誌?
我在服務器A上有一個REST服務。服務正在做一些東西並記錄一些消息,這要歸功於log4j。將日誌從REST服務發送到HTML頁面
另外,我有一個服務器B上的網頁,通過AJAX調用服務並獲得響應。除了接收到響應(對我來說工作正常)之外,我想在頁面上打印來自服務器端的日誌消息。
換句話說,我希望每當服務器A端有新的日誌消息時,視圖就會顯示它。
任何想法,以實現這一目標?
編輯: 如何使用websocket從log4j套接字appender檢索日誌?
我終於找到了解決我的問題的方法:
我創建了一個單例記錄器。每次我想記錄一條消息時,我都會獲取記錄器的實例,並將新消息添加到日誌的ConcurrentLinkedList。
另一方面,我創建了一個新的休息服務。我每秒鐘都會用ajax查詢來調用這個服務。它刪除列表的日誌消息並返回它們。視圖顯示它們。
您將創建一個REST端點來檢索原始日誌數據爲text/plain
。這可能是一些如下:
GET /logs HTTP/1.1
Accept: text/plain
你也可以提供一些查詢字符串參數來篩選按日期和時間日誌,如下:
GET /logs?from=2016-07-03T10:00:00Z&to=2016-07-04T10:00:00Z HTTP/1.1
Accept: text/plain
那麼你的客戶端可以請求這樣的端點,檢索他們想要的數據並將日誌顯示在HTML頁面中。
如果您希望在服務器端渲染HTML頁面,而不是接受text/plain
,請接受text/html
。
對於實時記錄,您可以考慮WebSockets。
然後如果我想實時檢索日誌,我可以每秒執行一次ajax請求到端點,並更新顯示html頁面上日誌的div。你認爲這是一個很好的解決方案嗎? – L01c
@ L01c對於實時,你可以考慮websockets。 –
在db中存儲日誌聽起來更容易 – HRgiger
log4j是一個開發人員的語言級別。不要將它與業務需求混合在一起。只需實現另一個業務級別的東西,通過顯式地發送信息。 – kan
@kan有好的一點 – HRgiger