JavaFXTips_Logging

ログを吐けますか

java.util.loggingを使う

JavaFXから標準出力に情報を出力するにはprintln関数を使えばいいのですが、 もし、サードパーティのライブラリをJavaFXアプリケーションから呼び出していて、 そのライブラリが例えばjava.util.loggingを使っていたとしましょう。

どうしてもそのライブラリから吐き出されるfineレベル(デフォルトでは出ないレベル) のログをJavaコンソールに出して不具合の原因調査をしたい、 そんなときがあるかも知れません。 JAVA_HOME\jre\lib\logging.properties を書き換えずに以下の方法で対応できます。

次の例は、com.hisagisoftパッケージ及び下位パッケージのクラスで、 レベルFINE以上のログをコンソールに出力する例です。 Web Start起動とブラウザ起動では、Javaコンソールに出力します。

  • com.hisagisoftのロガーを作成します。
  • 作成したロガーの出力レベルを、FINEに設定します。 これをしないと出力がINFO以上(WARNING,SEVERE)になります。
  • 親ロガーのハンドラのレベルを、定義されているだけ全部取得してFINEにしてしまいます。
import java.util.logging.Level;
import java.util.logging.Logger;

var logger:Logger;

function run(){
  logger = Logger.getLogger("com.hisagisoft");
  logger.setLevel(Level.FINE);
  for(hdl in logger.getParent().getHandlers()){
    hdl.setLevel(Level.FINE);
  }

  logger.finest("FINEST");
  logger.finer("FINER");
  logger.fine("FINE");
  logger.info("INFO");
  logger.warning("WARNING");
  logger.severe("SEVERE");
}

この例をWeb Start起動/ブラウザ起動するとJavaコンソールに例外が記録されます。 上の赤い部分が抵触しています。

出力結果:

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)

この例のWeb Start起動/ブラウザ起動では、 NetBeans IDEの「プロジェクトプロパティ>アプリケーション」で 「自己署名つきJAR」をチェックしてから起動することが必要です。

出力結果:

2009/08/03 16:50:05 com.hisagisoft.javafx.tips.Logging javafx$run$
詳細レベル (低): FINE
2009/08/03 16:50:05 com.hisagisoft.javafx.tips.Logging javafx$run$
情報: INFO
2009/08/03 16:50:05 com.hisagisoft.javafx.tips.Logging javafx$run$
警告: WARNING
2009/08/03 16:50:05 com.hisagisoft.javafx.tips.Logging javafx$run$
致命的: SEVERE

FINE以上が出力されました。 一方、FINEよりもリスクの低いFINERとFINESTは出力されませんでした。


カウンター

Home