2

単体テスト用の組み込みSolrサーバーの目的でSolrJを使用しています。

問題は、Mavenの出力に本当に必要のないsolrログが散らばっていることです。たとえば、テストの一環として意図的に不正なクエリをトリガーしています。私のテストは合格ですが、画面がSolrエラーでいっぱいになっているため、それを確認するのは非常に困難です。

SolrJでこれを回避する方法がわかりません。これをPOMファイルの一部として実行して、テストが失敗した場合に開発者がPOMを編集してより多くの情報を公開できるようにしたいと思います。

編集:

Solrは次のようにインスタンス化されます。

System.setProperty("solr.solr.home", "solr/")
def coreInitter = new CoreContainer.Initializer()
def core = coreInitter.initialize()
this.server = new EmbeddedSolrServer(core, "")
4

1 に答える 1

2

Solr wikiは、SLF4Jがバージョン1.4以上で使用されるロギングフレームワークであると説明しています。

プロジェクトのPOM依存関係を提供していないので、私は自分で作成しました。

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.myspotontheweb.demo</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
               <groupId>org.apache.solr</groupId>
               <artifactId>solr-solrj</artifactId>
               <version>3.6.1</version>
               <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
               </exclusions>
        </dependency>
        <dependency>
               <groupId>org.apache.solr</groupId>
               <artifactId>solr-core</artifactId>
               <version>3.6.1</version>
        </dependency>
    </dependencies>
</project>

これには、次の依存関係ツリーがあります。

$ mvn dependency:tree
..
..
[INFO] com.myspotontheweb.demo:demo:jar:1.0-SNAPSHOT
[INFO] +- org.apache.solr:solr-solrj:jar:3.6.1:compile
[INFO] |  +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO] |  +- commons-io:commons-io:jar:2.1:compile
[INFO] |  +- org.codehaus.woodstox:wstx-asl:jar:3.2.7:runtime
[INFO] |  +- org.slf4j:jcl-over-slf4j:jar:1.6.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] \- org.apache.solr:solr-core:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-core:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-analyzers:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-highlighter:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-kuromoji:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-memory:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-misc:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-phonetic:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-queries:jar:3.6.1:compile
[INFO]    |  \- jakarta-regexp:jakarta-regexp:jar:1.4:compile
[INFO]    +- org.apache.lucene:lucene-spatial:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-spellchecker:jar:3.6.1:compile
[INFO]    +- org.apache.lucene:lucene-grouping:jar:3.6.1:compile
[INFO]    +- commons-codec:commons-codec:jar:1.6:compile
[INFO]    +- commons-fileupload:commons-fileupload:jar:1.2.1:compile
[INFO]    +- commons-lang:commons-lang:jar:2.6:compile
[INFO]    +- com.google.guava:guava:jar:r05:compile
[INFO]    \- javax.servlet:servlet-api:jar:2.4:compile

これらはいずれもロギング実装jarではありません。コモンズロギングAPI呼び出しがSLF4Jにリダイレクトされるようにするために、SolrJによって「jcl-over-slf4j」が追加されていることに気付くでしょう。

SLF4Jロギングを完全に無効にするには、特別なNOP依存関係を追加します。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.6.1</version>
    <scope>runtime</scope>
</dependency>

スコープ宣言に注意してください。コードのコンパイルに実装jarのログ記録は必要ありません。また、別のプロジェクトがプロジェクトのPOMを使用する場合、問題が発生する可能性があります。

于 2012-09-30T09:11:35.070 に答える