论坛: 公开讨论 (Thread #20958)

blogicで発生した例外のStackTraceが出力されない現象について (2008-12-10 18:35 by dancingsummer #40554)

TERASOLUNA 関係者の皆様
dancingsummerと申します。

TERASOLUNA Server Framework for Java(Web版) を使用させていただいております。
Version は 2.0.1.0 です。

Server Framework for Java(Web版) + Struts でプログラムを開発していて、
一点不思議に感じるところがありますので、質問させてください。

BLogic および ActionForm を利用している際に、BLogic から発生した例外を
そのまま放置してつかまえずにフレームワーク側に渡した際に、
StackTrace などがコンソールや log4j に出力されることなく、
何事もなかったかのように処理が終了してしまう現象が発生しております。

希望する動作は、開発時や運用時などに BLogic や ActionForm などで例外発生して、
かつそれらクラス内で処理されずに上位に throw された例外は、フレームワーク側で
catch してコンソール出力または log4j 出力などがされる、です。

私の使い方の間違い、設定方法の漏れ等が考えられましたら、ご指摘・ご教授をお願いしたいです。

また、もし、現在TERASOLUNA側の仕様が、StackTraceを出力しないとなっているようであれば、
出力いただけることを期待致します。
FrameworkにてStackTraceが出力されることにより、単体バグの調査等にて、
開発効率が上がると考えます。

お忙しいところ恐縮ですが、どうぞよろしく、おねがいいたします。

回复到 #40554×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登录

RE: blogicで発生した例外のStackTraceが出力されない現象について (2008-12-10 18:48 by 匿名 #40555)

私も昔はまったことがあるのですが、恐らくStrutsのExceptionHandler#logExceptionでDEBUGログで出力するようになっているからです。

開発時の効率を上げたいという理由なら、log4j.propertiesでExceptionHandlerをデバッグレベルまで出力するようにすればStackTraceを出力するようになります。別の方法としては、ExceptionHandler#logExceptionをオーバーライドしたクラスを作成して、Exceptionの設定部分にSystemExceptionHandlerみたいに設定してあげればよいと思います。
(ソースも張ろうかと思ったのですが、大した話ではないので文章だけで失礼します)

今後の対応についてはTerasolunaチームのどなたかお願いします。
回复到 #40554

回复到 #40555×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登录

RE: blogicで発生した例外のStackTraceが出力されない現象について (2008-12-11 10:36 by dancingsummer #40576)

ご返信ありがとうございます。

ご教授いただきましたとおり、log4j.propertiesにてStrutsのログレベルをDEBUGレベルまで落とし、blogic,ActionFormにて発生した例外のStackTraceが出力されることが確認できました。
ありがとうございます。

>(ソースも張ろうかと思ったのですが、大した話ではないので文章だけで失礼します)
はい、文章のみでご指摘いただいた内容について、理解できました。ありがとうございます。

今後の対応という点については、今回の件、Strutsのログレベルを変更することで対応できますが、Strutsのデバッグをしたいわけではないので、その上位FrameworkであるTERASOLUNAにてStackTraceを出力する対応をいただくことを期待いたします。

ありがとうございました。失礼致します。
回复到 #40555

回复到 #40576×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登录

RE: blogicで発生した例外のStackTraceが出力されない現象について (2008-12-11 10:59 by kimuraku #40579)

Action以降で発生した例外は、現状では以下のように処理されます。
----
・<exception>で例外ハンドリング対象となっていない例外の場合
 ⇒RequestProcessor#processException()にて、ServletExceptionでラッピングされる
・<exception>で例外ハンドリング対象となっている例外の場合
 ⇒ServletExceptionでラッピングされない
  ・かつhandler属性で例外処理ハンドラを指定しなかった場合
   ⇒StrutsデフォルトのExceptionHandlerが採用され、例外ログがDEBUGログとして出力されてしまう。
  ・かつhandler属性で例外ハンドラを指定した場合
   ⇒設定した例外処理ハンドラでのログ出力処理による。
----   
   
handler属性を設定し忘れた場合にStrutsデフォルトの
ExceptionHandler#logException()が起動されてしまう件ですが、
Strutsのコード内で、ハンドラクラス名決め打ちで
ハードコーディングされてしまっているためです。

TERASOLUNA次期バージョンでは本事象に対応するために、
デフォルトのログ出力用例外ハンドラのAPIを新規追加する予定です。
グローバル例外処理時にjava.lang.Exceptionをこのハンドラで
処理することで、スタックトレースをエラーログとして出力することが
可能となります。
回复到 #40576

回复到 #40579×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登录