unit-testing - 如何使用 SolrJ 禁用 solr 日志记录?

标签 unit-testing maven logging solr solrj

我使用 SolrJ 作为嵌入式 solr 服务器来进行单元测试。

问题是我的 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, "")

最佳答案

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。您会注意到 SolrJ 添加了“jcl-over-slf4j”,以确保公共(public)日志记录 API 调用重定向到 SLF4J。

要完全禁用 SLF4J 日志记录,请添加特殊的 NOP 依赖项:

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

注意范围声明。编译代码不需要记录实现 jar,如果另一个项目使用您项目的 POM,则可能会导致问题。

关于unit-testing - 如何使用 SolrJ 禁用 solr 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570154/

相关文章:

c# - 非常简单的文件追加器日志记录不起作用

maven-surefire-plugin 忽略 pom.xml 中的插件顺序

ruby-on-rails - 如何向已完成的 Rails 应用程序添加测试?

javascript - 在 PhantomJS 中模拟时区以进行 Jasmine 测试

java - 启动和运行私有(private) Maven 存储库的最快方法是什么?

c# - LibGit2Sharp 获取自 {Hash} 以来的所有提交

python - 如何使用 nosetests 测试函数在函数内被调用

java - Maven 传递依赖中断构建

angularjs - OTS将Glyphicon的字体文件的: Failed to convert WOFF 2. 0字体错误解析为SFNT,用于Spring-boot

java - 使用MySQL将web java连接到数据库系统