<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have searched the <a href="https://github.com/apache/dubbo/issues">issues</a> of this repository and believe that this is not a duplicate.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have checked the <a href="https://github.com/apache/dubbo/blob/master/FAQ.md">FAQ</a> of this repository and believe that this is not a duplicate.</li>
</ul>
<h3 dir="auto">Environment</h3>
<ul dir="auto">
<li>Dubbo version: 2.7.3</li>
<li>Operating System version: macOS</li>
<li>Java version: 11</li>
</ul>
<h3 dir="auto">Steps to reproduce this issue</h3>
<ol dir="auto">
<li>Customize ProxyFactory extension in provider project.</li>
<li>Use zookeeper registry.</li>
<li>Start consumer project to call provider's interface.</li>
</ol>
<p dir="auto">Pls. provide [GitHub address] to reproduce this issue.</p>
<h3 dir="auto">Expected Result</h3>
<p dir="auto">Consumer projects use default extension rather than the one configured by provider.</p>
<h3 dir="auto">Actual Result</h3>
<p dir="auto">Consumer project throws "java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.ProxyFactory by name ..." because the custom ProxyFactory extension did not exist in consumer project.</p>
<p dir="auto">If there is an exception, please attach the exception trace:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Exception in thread &quot;main&quot; java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.ProxyFactory by name mh
	at org.apache.dubbo.common.extension.ExtensionLoader.findException(ExtensionLoader.java:520)
	at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:527)
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:351)
	at org.apache.dubbo.rpc.ProxyFactory$Adaptive.getProxy(ProxyFactory$Adaptive.java)
	at org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:433)
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:329)
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:250)"><pre class="notranslate"><code class="notranslate">Exception in thread "main" java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.ProxyFactory by name mh
	at org.apache.dubbo.common.extension.ExtensionLoader.findException(ExtensionLoader.java:520)
	at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:527)
	at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:351)
	at org.apache.dubbo.rpc.ProxyFactory$Adaptive.getProxy(ProxyFactory$Adaptive.java)
	at org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:433)
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:329)
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:250)
</code></pre></div>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have searched the <a href="https://github.com/apache/incubator-dubbo/issues">issues</a> of this repository and believe that this is not a duplicate.</li>
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I have checked the <a href="https://github.com/apache/incubator-dubbo/blob/master/FAQ.md">FAQ</a> of this repository and believe that this is not a duplicate.</li>
</ul>
<p dir="auto">Our common logger is a logging facade just like SLF4J.<br>
We can enhance it to support parametrized logging</p>
<p dir="auto">We have many places like this:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="if (logger.isInfoEnabled()) {
                logger.info(&quot;aaa&quot; + &quot;bbb&quot; + &quot;ccc&quot;);
}"><pre class="notranslate"><code class="notranslate">if (logger.isInfoEnabled()) {
                logger.info("aaa" + "bbb" + "ccc");
}
</code></pre></div>
<p dir="auto">We are using logging guard to avoid unnecessary string concatenate.</p>
<p dir="auto">With the support of parametrized logging, this can be simplified just like:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="logger.debug(&quot;Hello world {} {} and {}&quot;, a, b, c);"><pre class="notranslate"><code class="notranslate">logger.debug("Hello world {} {} and {}", a, b, c);
</code></pre></div>
<p dir="auto">Similar feature discribed in SLF4j:<br>
<a href="https://www.slf4j.org/faq.html#logging_performance" rel="nofollow">https://www.slf4j.org/faq.html#logging_performance</a></p>
<p dir="auto">Question: Any other points can be enhanced?</p>