Log4j拡張に明け暮れる

Log4jって便利なのですが、意外としたいことができない。拡張性はあるのでよいのだが、拡張しても変更する行は2行だったりする。
主に拡張するクラスは以下のとおり

  • PatternParser:出力レイアウト(%d{yyyyMMdd}等)を解析してFormattingInfoおよびPatternConverterを設定する。
  • PatternConverter:PatternParserで決められるConverterで実際に渡された文字列をconvertしたりformatしたりする。
  • PatternLayout:createPatternParserで、拡張したPatternParserクラスのインスタンスを作成するだけ。

これさえ知っていれば結構便利だったりする。
しかし、PatternParser#parseがほとんど修飾子無しだったりして継承してもアクセスできない;つまりこのメソッドはオーバーライドしてくれるなってことか orz フォーマットパターン増やしたいのにな・・・。
JavaDoc見て分かるとおり、なぜか%-5.1p等のフォーマットって文字列の後ろから何文字という指定しか出来ないんだよな・・・。先頭からの指定ができないのは辛い。例えば、[INFO] → [I] と表示させたいとしてもできないということだ。
http://www.jajakarta.org/log4j/jakarta-log4j-1.1.3/docs-ja/documentation.html
ちょっと古いバージョンのドキュメント(日本語)
今回、フォーマット指定をする部分を拡張するにあたり、結局、PatternParser、PatternConverter、FormattingInfoのコピーを行い、オーバーライドしているものの書き直ししました。これはオープンソースだからできることですが、それにしてもlog4jの拡張できる範囲にも参ったものだ。