この質問は何度も尋ねられていますが、私はフォーラムでRegExに関するほぼすべての記事を読んだことがあります。しかし、ついにこのことが、ゆっくりとしかし確実に私を殺している! :D 何か助けていただければ幸いです。複数行RegExの2つの文字列間の読み取り
データベースに接続しようとしたときにdbエンジンが実行されていないと、予期したとおりにconnection refused
例外が発生します。しかし、未知の理由から、この例外は複数回ネストされています(私はどれくらい多くの... 20,30,40 ... !!!)回とmyException.getCause()
の呼び出しは毎回NULLを返します。
そのため、ユーザーにstacktrace全体を表示したくないので、正規表現でメインメッセージだけをキャッチするのはすばらしく簡単です。残念ながら、私はそれが期待されるほど簡単ではありません。
まず、スタックトレースの不要な部分を切り捨ててメッセージを削除するのは良い解決策だと思いますか?もしそうでなければ、何をお勧めしますか?
私の例外は、以下のようになります。
Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection refused: connect
STACKTRACE:
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.(Socket.java:434)
at java.net.Socket.(Socket.java:244)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
at com.mysql.jdbc.Connection.(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
............. and so on ............
私は例えばEXCEPTION **
とSTACKTRACE
間の文字列を取得するために、さまざまなパターンを試してみました:
EXCEPTION(\r?\n?.*?\r?\n?)*STACKTRACE
または
EXCEPTION\s*\W*(.*|\r*|\n*)+STACKTRACE
何も動作するようです。 (?s)EXCEPTION \*\*\s*(.*?)\s*STACKTRACE
:事前
正規表現の良い習慣だけど、それは良い考えだとは思わない。意味のあるメッセージが必要な場合は、マルチキャッチブロックを使用してユーザーにいくつかの一般的な情報を表示することができ、「ArrayIndexOutOfBoundsException -1」を理解できるユーザー。つまり、データなどを解析できませんでした。 – HRgiger
@ Core-Update 'myException.getMessage()'と 'myException.getLocalizedMessage()'はどうですか?どちらもNULLを返しますか? – Pons
@Pons 'myException.getMessage()'を使用すると、このメッセージ(スタックトレース全体)が表示されます。 localizedMessageは、通常のgetMessageと同じものを出力します。 –