我有一個應用程序創建一個套接字處理程序到我的日誌服務器(在不同的設備上)並使用它。這工作正常。如何判斷java日誌sockethandler是否仍在運行?
如果日誌服務器終止並重新啓動,應用程序不知道這一點。該應用程序應該刪除舊的套接字處理程序並添加一個新的套接字處
如何判斷java日誌sockethandler是否仍在運行?
編輯:我想出了下面的代碼,這似乎工作:
public static class MySocketHandler extends SocketHandler {
public MySocketHandler(String host,int port, Logger logger) throws IOException {
super(host,port);
this.logger=logger;
setErrorManager(new ErrorManager() {
@Override public synchronized void error(String msg,Exception ex,int code) {
super.error(msg,ex,code);
System.out.println("error: "+msg+", "+ex+", "+code);
removeHandler();
failed=true;
}
});
}
void removeHandler() {
logger.removeHandler(MySocketHandler.this);
System.out.println("removed my socket handler");
}
final Logger logger;
Boolean failed=false;
}
請參閱我的編輯 –
看起來像您試圖保存儘可能多的消息。在我的情況下,這些是在現場登錄到每臺設備上的文件適配器的一堆專用平板電腦。插入電纜並不總是可行的,因爲平板電腦可能被安裝在盒子中。有時一臺筆記本電腦可能出現在WiFi網絡上以捕獲日誌。所以我希望套接字處理程序在電源週期和其他事情出錯時正常退出並重新啓動。 –
@RayTayek示例代碼僅在連接斷開時存儲記錄。每次發佈都會嘗試重新連接套接字處理程序併發布任何記錄的積壓。 – jmehrens