一部のログ レベルが壊れているように見えますか?
GlassFish 3.1.2.2 インスタンスから直接Java Web Start (これをJWSと呼び始めます) アプリケーションを実行します。クライアントには次のような静的ロガーがあります。
private final static Logger LOGGER;
static {
LOGGER = Logger.getLogger(App.class.getName());
// Not sure how one externalize this setting or even if we want to:
LOGGER.setLevel(Level.FINER);
}
メイン メソッドでは、ロギング機能の簡単なテストからロジックを開始します。
alert("isLoggable() INFO? " + LOGGER.isLoggable(Level.INFO)); // Prints TRUE!
alert("isLoggable() FINE? " + LOGGER.isLoggable(Level.FINE)); // ..TRUE
alert("isLoggable() FINER? " + LOGGER.isLoggable(Level.FINER)); // ..TRUE
alert("isLoggable() FINEST? " + LOGGER.isLoggable(Level.FINEST)); // ..FALSE
私のアラート メソッドはJOptionPane
、「真の GUI ロギング」のダイアログ ボックスを表示します。とにかく、コード スニペットに追加した私のコメントにプリントアウトが表示されます。予想どおり、レベルINFO、FINE、およびFINERではロガーが有効になっていますが、 FINESTでは有効になっていません。
アラート メソッドの後に、次のように入力します。
// Info
LOGGER.info("Level.INFO");
LOGGER.log(Level.INFO, "Level.INFO");
// Fine
LOGGER.fine("Level.FINE");
LOGGER.log(Level.FINE, "Level.FINE");
// Finer
LOGGER.finer("Level.FINER");
LOGGER.log(Level.FINER, "Level.FINER");
LOGGER.entering("", "Level.FINER", args); // <-- Uses Level.FINER!
// Finest
LOGGER.finest("Level.FINEST");
LOGGER.log(Level.FINEST, "Level.FINEST");
Java コンソールに移動し、[詳細設定] タブをクリックしてから、[ログを有効にする] にチェックマークを付けます。よし、アプリを起動しよう。何が起こると思いますか?Level.INFO のみが印刷されます。これが私の証明です(一番下を見てください):
私は自分のコンピューターのログ ファイルをグーグルで検索して、Level.FINE と Level.FINER がファイル システムのどこかに行き着かないかどうかを確認するために最善を尽くしました。ただし、ログ メッセージがどこにも見つかりません。
質問のまとめ
提供されている例で
Level.FINE
とのロギングが機能しないように見えるのはなぜですか?Level.FINER
静的初期化ブロックでログ レベルを設定しましたが、この設定をある種の構成ファイルに外部化したいと考えています。おそらく、GlassFish にデプロイする EAR ファイルと一緒にパッケージ化されます。または、サーバーからダウンロードした JNLP ファイルにいくつかのプロパティを手動で書き込んでみませんか。これはどういうわけか可能ですか?