(別のデバイス上の)ログサーバーへのソケットハンドラを作成して使用するアプリがあります。これは正常に動作します。java logging sockethandlerがまだ実行されているかどうかを確認するには?
ログサーバーが終了して再起動した場合、アプリケーションはこれを認識しません。アプリケーションは古いソケットハンドラを削除し、新しいソケットハンドラを追加する必要があります。
java logging sockethandlerがまだ実行されているかどうかを確認するにはどうすればよいですか?
編集:SocketHandler をラップし、例外をリッスンする(内部クラスなど)のカスタムjava.util.logging.ErrorManager
をインストールするには、プロキシハンドラを作成します
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