ということで、また伐採に頭を悩ませています。私は知っています、それはどれほど複雑になることができますか? さて、見てみましょう...
WebSphere Application Server 6.1 (実際には Portal Server 6.1 ですが、内部は WAS 6.1 です) で実行する新しいプロジェクトを開始しています。私は通常、WAS プロジェクトに java.util.logging を使用していますが、すべて問題ありません。この顧客は SLF4J ファンで、それを使用したいと考えています。まあ、簡単に聞こえます。
そこで、slf4j-api-1.5.8.jar と slf4j-jdk14-1.5.8.jar を WEB-INF/lib ディレクトリにデプロイします。私のコードでは、-
// These classes are coming from org.slf4j.*
private static Logger log = LoggerFactory.getLogger(MyClass.class);
...
log.debug("This is a log message");
予想どおり、SystemOut.log にエントリが記録されます。しかし、私が理解できないのはそのメッセージの形式です。サンプルは--
[12/15/09 15:43:15:071 EST] 00000042 MyClass D com.example.MyClass This is a log message
そのサンプル ログ エントリの内容を説明しましょう。com.example.MyClassの左側にあるものはすべて、jul フォーマッターから来ていると思います。その右側はすべて、log.debug() に含めたものです。では、誰がcom.example.MyClassを追加しているのでしょうか? 私が考えることができる唯一のことは、SLF4Jがメッセージを基礎となるjulに渡す前にそれを追加していることです
私をいらいらさせているのはcom.example.MyClassの部分です。SLF4J が生成するログ メッセージにそれを含めたくありません。クラス名はすでに含まれているので、必要のない余分な毛羽立ちです。さらに、実際のパッケージ名は非常に長く、それらを含めると、ログ エントリの実際の内容が右にずれすぎます。
単純な java.util.logging を使用すると、「com.example.MyClass」の部分が含まれていないことを除いて、ログ エントリはまったく同じです。まさに私が望むように!
問題は、WAS で SLF4J を介して生成されたログ メッセージで、この余分なクラス名エントリを削除するにはどうすればよいかということです。
ありがとう!