27

slf4jで使用する場合、

String test = blahblahblah;
logger.info("{}",test);

以下のようにトレースします

java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;

at org.slf4j.impl.JDK14LoggerAdapter.info(JDK14LoggerAdapter.java:304)
4

8 に答える 8

46

さまざまな SLF4J API と統合ライブラリの間でバージョンが一致していないようです。SLF4J は、バージョンの互換性に関して非常に不安定です (たとえば、1.6.x は 1.5.x と下位互換性がありません)。

さまざまな JAR バージョンが一致していることを確認し、クラスパスに重複する JAR がないことを確認してください。

于 2011-03-29T22:49:54.347 に答える
9

このエラーが発生していました:

SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
.
.
.

以下に示すように、pom.xmlのバージョンで行にコメントを付けたところ、現在は機能しています。

    <dependency> 
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <!-- <version>1.6.5</version> -->
    </dependency>
于 2012-06-21T11:23:10.620 に答える
0

これは、互換性のないバージョンが原因であると予想されます (アプリケーション 6.0 を実行していて、jar ファイル (slf4j 1.5) を保持している場合、または両方 (slf4j 1.5 と 1.6) を保持している場合) は、例外が発生する可能性があります)。

提案は適切なバージョンに行くことです。ビルド パスに複数のバージョン ファイル (slf4f 1.5 および slf4j 1.6) ファイルを配置しないでください。適切なバージョンを削除してください。

その後、必ず実行してください。

于 2012-06-15T06:56:13.017 に答える
0

これは、JDK14LoggerAdapter クラスとは異なるバージョンの MessageFormatter クラスを使用しているようです。クラスパスを制御します。

于 2011-03-29T22:50:16.010 に答える
0

私の場合、さまざまな SLF4J API と統合ライブラリの間で正しいバージョンが一致しています。ただしtika-app、SLF4J クラスがラップされている jar も使用しています。

SLF4J クラスを含む (fat)jar があるかどうかを確認するには、Unix システムの場合:

WEB-INF/lib/ ディレクトリに移動し、次のコマンドを実行します。

for i in *.jar; do jar -tvf "$i" | grep -Hsi MessageFormatter && echo "$i"; done

これにより、コンソール上のすべての jar から一致する結果が出力されます。

最後に、tika-appjar ごとに置き換えましたtika-core

于 2018-07-26T05:40:45.470 に答える