2

ということで、また伐採に頭を悩ませています。私は知っています、それはどれほど複雑になることができますか? さて、見てみましょう...

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 を介して生成されたログ メッセージで、この余分なクラス名エントリを削除するにはどうすればよいかということです。

ありがとう!

4

2 に答える 2

1

slf4j を java.util.logging にバインドします。これは、標準のメッセージ形式のように見えないため、WebSphere 内で構成されている可能性が最も高いです。

WebSphere はわかりませんが、slf4j に別のものにバインドするように指示すると、より良い結果が得られる場合があります。slf4j-simple バックエンドでよいでしょうか? java.util.logging を呼び出す代わりに、info-or-higher メッセージを出力するだけです。

于 2009-12-15T21:55:49.563 に答える
0

基本的には、基礎となるロギング メカニズムによって生成されるロギング メッセージのレイアウトを構成する必要があります。

SLF4J は実際にはロギングを実行しませんが、設定方法に基づいて他のロギング システム (log4j、JUL など) に委任します。

したがって、SLF4JをJULにバインドしている場合、あなたが求めている本当の質問は次のいずれかだと思います

于 2009-12-15T21:44:37.900 に答える