如何在 solrj 中记录完整的 URL?

How do I log the full URL in solrj?

我有一个 Java 应用程序,它使用 Solrj 访问远程 solr 服务器。它是用 Maven 和 Spring 构建的。设置如下。

实例化 solr 服务器对象并将其连接到 AutocompleteSolrTemplate bean(自定义):

<solr:solr-server id="solrServer" url="${solr.host}" maxConnections="1500" timeout="2000"/>
<bean id="customSolrTemplateEncounter" class="com.domain.common.solr.AutocompleteSolrTemplate">
    <constructor-arg ref="solrServer"/>
    <constructor-arg value="encounterAutocomplete"/>
</bean>


public class AutocompleteSolrTemplate extends SolrTemplate {
    private static final Logger log = Logger.getLogger(AutocompleteSolrTemplate.class);

    public AutocompleteSolrTemplate(final SolrServer solrServer, final String core) {
        super(solrServer, core);
    }

    final QueryResponse runSolrQuery(final SolrQuery solrQuery) {
        return execute(new SolrCallback<QueryResponse>() {
            @Override
            public QueryResponse doInSolr(final SolrServer solrServer) throws SolrServerException, IOException {

            log.debug("Solr request:\n\t" + RequestUtil.URLDecode(solrQuery.toString()));
                return solrServer.query(solrQuery, METHOD.POST);
            }
        });
    }
}

所以我可以像上面那样轻松地记录 solr 请求,但是如何记录完整的 solr URL?主机是一个 属性,会在应用程序加载 ${solr.host} 时被替换,但为了调试目的最好记录包括主机在内的完整 URL。

有什么帮助吗?

您正在创建 AutocompleteSolrTemplate 作为:

<bean id="customSolrTemplateEncounter" class="com.domain.common.solr.AutocompleteSolrTemplate">
    <constructor-arg ref="solrServer"/>
    <constructor-arg value="encounterAutocomplete"/>
</bean>

为什么不能简单地添加一个构造函数 arg 并在其中传递 solr url 以便您可以根据需要记录它!!

 public AutocompleteSolrTemplate(final SolrServer solrServer, final String core, final String solrUrl) {
        //Log the URL here!!
        super(solrServer, core);
    }