java.util.loggerはJava Web Startでは使えない

ログ出力時のフォーマッタを独自のフォーマッタクラス"com.hoge.log.formatter.HogeDefaultFormatter"で実装し、logging.propertiesを以下のように変更し、クラスパス上(config/)に配置する。

handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.FileHandler.pattern = /application%g.log
java.util.logging.FileHandler.limit = 100000
java.util.logging.FileHandler.count = 5
java.util.logging.FileHandler.formatter = com.hoge.log.formatter.HogeDefaultFormatter

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = com.hoge.log.formatter.HogeDefaultFormatter
com.hoge = INFO

コードでは以下のように、スタティックコンストラクタでlogging.propertiesの設定を反映することで

static {
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    InputStream ins = cl.getResourceAsStream("config/logging.properties");
    try {
        try {
            LogManager man = LogManager.getLogManager();
            man.readConfiguration(ins);
        } finally {
            ins.close();
        }
    } catch (IOException e) {
        e.printStackTrace()
    }
}

ロガーのデフォルトのフォーマッタを切り換えることができるのだが(デフォルトはなぜかXML形式のログを吐くフォーマッタが採用されている。ツールで読むことを前提にしたのだろうか)、通常のアプリケーションでは正常に動作するのに、Java Web Startから起動すると、上記のコードでフォーマッタを換えたようでも実際には元の(jreの規定値?)フォーマッタが使われてしまう現象を確認している。※

あと、何より嫌なのがFileHandlerクラスのパターンプロパティで

java.util.logging.FileHandler.pattern = /application%g.log

と、カレントディレクトリにログを出力する設定にした場合、Java Web Start経由で起動したのだから、同アプリケーションがキャッシュされるロケーションにログが出力されるのかと思いきや、現在アプリケーションが実行されているパスを基準に出力しようとすることだ。

デフォルトで使われるフォーマッタが嫌だからわざわざ換えているのに、この振る舞いでは意味が無い。

※無論、Javaコントロールパネルではログの出力を有効にしている。