- PR -

AppletでLog出力を制御するには

1
投稿者投稿内容
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-10-25 12:11
Servletではlog4jをcommons-loggingでラップしてログを出力しております。
今回Appletを開発することになったのですが、Eclipse上からAppletViewerで
実行する分にはlog4jでコンソールに出力することが出来ます。
しかし、ブラウザで実行すると当然ながら出力することが出来ません。

そこで、java.util.loggingを使用すらためcommons-logging-api.jarを
appletタグのarchive属性に指定してログ出力を試みましたが、INFOレベル
以上しか出力することが出来ません。

ローカルの$JAVA_HOME/jre/lib/logging.propertiesの「.level = INFO」を
「.level = FINE」にしても駄目。やはり、アプレットはローカルの設定ファイル
など、セキュリティの関係上読んでないのかもしれません。

そこで、アプレットのアーカイブにlogging.properties形式のファイルを
含めて、LogManager.getLogManager().readConfiguration(getClass().getResourceAsStream());
を実行してみましたが、AccessControlExceptionが発生してしまいます。

ここで途方に暮れてしましました。皆さんはおとなしくSystem.out.printlnしているの
でしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-25 14:00
まず、読み込みすらできないのに書き込みができるかも、と思うのがどうかしています。
ログファイルとはいえ、ダウンロードしたアプレットに勝手に書き込みされたら怖くて
使えませんよね。

方法として考えられるのは、署名付アプレットにするか、サーバ側にログモニタを立てて
SocketAppenderでログを出力するといったところでしょうか。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-10-25 14:31
言葉足らずでした。

「ログファイル」ではなく、「コンソールに出力するログ」の事を
言っています。
IDEからアプレットビューワーで実行できているのが、
ブラウザで実行すると期待した結果にならない時、JavaConsoleを使って
デバッグすることになると思いますが、そのときにやはりSystem.outを
使うしか方法が無いのかと思い質問しました。

[ メッセージ編集済み 編集者: おかもと 編集日時 2004-10-25 14:46 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-25 15:25
すいません、読み違えていました。
それであれば、構成情報をファイルからではなく、URLから取得してはどうでしょうか。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-10-25 16:01
試してみましたがやはりAccessControlExceptionが投げられます。
そこで、今一度APIのロギングに関する部分をじっくり読みますと、

「信頼されていないアプレットは、名前付きロガーを通常の方法で作成して使用できますが、ロギング制御設定を変更してハンドラの追加や削除を行なったり、ログレベルを変更することはできません。」

と言う一文を見つけることが出来ました。「信頼されていないアプレット」とは
署名付きアプレットだと思います。どうやらアプレットでは手軽にログレベルを
変更することは出来ないようですね。勉強になりました。

と言うことで、自前でデバッグ用ロギングの仕組みを作るか、System.outで
乗り切るしか無さそうです。後、アプレットは全部INFOにするってのも
ありかもしれません。

どうもありがとうございました。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2004-10-25 23:36
お世話になっております。

引用:

と言うことで、自前でデバッグ用ロギングの仕組みを作るか、System.outで
乗り切るしか無さそうです。後、アプレットは全部INFOにするってのも
ありかもしれません。



 JDK1.3や1.4でのApplet開発は行ったことがないので外しているかもしれませんが、デバッグの時のみjava.policyファイルを書き換える(あるいはextフォルダにAppletを含んだjarファイルを格納する)と、ローカルのファイルも読み込めるかもしれません。
 ただ、この場合実稼動環境と動作が異なる危険性がありますので、あまりお勧めはできないかと思いますが・・・。
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-10-25 23:47
引用:

syoさんの書き込み (2004-10-25 23:36) より:

 JDK1.3や1.4でのApplet開発は行ったことがないので外しているかもしれませんが、デバッグの時のみjava.policyファイルを書き換える(あるいはextフォルダにAppletを含んだjarファイルを格納する)と、ローカルのファイルも読み込めるかもしれません。
 ただ、この場合実稼動環境と動作が異なる危険性がありますので、あまりお勧めはできないかと思いますが・・・。




なるほど。実はJavaのセキュリティ関連はほとんど理解していないので、
機会が有れば勉強しながらトライしてみようかと思います。

個人的にはJava Web Startを使ってJava Applicationを配布する方法に
転換すればAppletほど制約は受けないのではないかと思っています。
もっとも、Java Web Startも別の制約を受けるのかもしれませんが・・・。

参考になる意見をありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)