This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site-v2
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git
The following commit(s) were added to refs/heads/asf-site-v2 by this push:
new 00c303828b deploy: 2825fefc0ef9d057cbaa5bafcbab7c516b4131c1
00c303828b is described below
commit 00c303828b023a02077e74ca3d121cf71bb4034c
Author: AlbumenJ <[email protected]>
AuthorDate: Thu Feb 9 08:21:49 2023 +0000
deploy: 2825fefc0ef9d057cbaa5bafcbab7c516b4131c1
---
sitemap.xml | 2 +-
.../observability/index.xml | 155 ++++++++++++++++++++-
.../observability/logging/index.html | 130 ++++++++++++++++-
.../advanced-features-and-usage/service/index.xml | 4 +-
.../service/transaction/index.html | 6 +-
zh/sitemap.xml | 2 +-
6 files changed, 287 insertions(+), 12 deletions(-)
diff --git a/sitemap.xml b/sitemap.xml
index 43269af776..8803beb000 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh/sitemap.xml</loc><lastmod>2023-02-09T16:15:56+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-02-09T08:44:24+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><sitemapindex
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://dubbo.apache.org/zh/sitemap.xml</loc><lastmod>2023-02-09T16:17:37+08:00</lastmod></sitemap><sitemap><loc>https://dubbo.apache.org/en/sitemap.xml</loc><lastmod>2023-02-09T08:44:24+08:00</lastmod></sitemap></sitemapindex>
\ No newline at end of file
diff --git
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
index 71235a7a9d..59d68b8a90 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/index.xml
@@ -476,4 +476,157 @@
</span></span><span style="display:flex;"><span> logger<span
style="color:#719e07">.</span>error<span
style="color:#719e07">(</span><span style="color:#2aa198">&#34;Error
occurred when pushing metrics to prometheus: &#34;</span><span
style="color:#719e07">,</span> e<span style="color:#719e07">);</span>
</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
-</span></span></code></pre></div></description></item><item><title>Docs3-V2:
链路追踪</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</guid><description/></item><item><title>Docs3-V2:
日志管理</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-fea
[...]
\ No newline at end of file
+</span></span></code></pre></div></description></item><item><title>Docs3-V2:
链路追踪</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/tracing/</guid><description/></item><item><title>Docs3-V2:
日志管理</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-fea
[...]
+<p>在 Dubbo 框架内所有的日志输出都是通过 LoggerFactory 这个静态工厂类来获得 Logger 的对象实体,并且抽离了一个
LoggerAdapter 用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter,
SLF4JLoggerAdapter等一些实现子类,分别对接了不同 Log 第三方实现。既然 Dubbo 能够支持这么多log实现,那么这些实现在 Dubbo
中优先级是在呢么样的呢?这里的优先级是只未配置指定的 logger 提供方的情况下,由 Dubbo 框架自己选择。优先级如下:</p>
+<table>
+<thead>
+<tr>
+<th>第三方日志框架</th>
+<th>优先级</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Log4j</td>
+<td>最高(默认就用这个)</td>
+</tr>
+<tr>
+<td>SLF4J</td>
+<td>次高(上面没有采用这个)</td>
+</tr>
+<tr>
+<td>Common Logging(jcl就是common logging)</td>
+<td>次低(Log4j和SLF4J在项目中均没有就用这个)</td>
+</tr>
+<tr>
+<td>JDK log</td>
+<td>最低(最后的选择)</td>
+</tr>
+</tbody>
+</table>
+<p>Dubbo 日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#586e75">/**
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"> * ChannelListenerDispatcher
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"> */</span>
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">public</span> <span
style="color:#268bd2">class</span> <span
style="color:#268bd2">ChannelHandlerDispatcher</span> <span
style="color:#268bd2">implements</span> ChannelHandler <span
style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">private</span> <span
style="color:#268bd2">static</span> <span
style="color:#268bd2">final</span> ErrorTypeAwareLogger logger <span
style="color:#719e07">=</span> LoggerFactory<span
style="color:#719e07">.</span>getErrorTypeAwareLogger<span
style="color:#719e07">(</span>ChannelHandlerDispatcher<span
style="color:#719e07">.</span>class<span style="color:#71 [...]
+</span></span></code></pre></div><p>Dubbo 采用的日志输出方式是首先从
dubbo.application.logger
系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:</p>
+<p>顺序为:log4jLogger &gt; slf4jLogger &gt; JclLogger &gt;
JdkLogger</p>
+<p>LoggerFactory 在类加载过程中变量的初始化过程:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-java" data-lang="java"><span
style="display:flex;"><span><span style="color:#586e75">// search
common-used logging frameworks
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span><span style="color:#268bd2">static</span>
<span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> String logger
<span style="color:#719e07">=</span> System<span
style="color:#719e07">.</span>getProperty<span
style="color:#719e07">(</span><span
style="color:#2aa198">&#34;dubbo.application.logger&#34;</span><span
style="color:#719e07">,</span> <span
style="color:#2aa198">&#34;&#34;</span><span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">switch</span> <span
style="color:#719e07">(</span>logger<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">case</span> Slf4jLoggerAdapter<span
style="color:#719e07">.</span>NAME<span style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span><span
style="color:#719e07">new</span> Slf4jLoggerAdapter<span
style="color:#719e07">());</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">case</span> JclLoggerAdapter<span
style="color:#719e07">.</span>NAME<span style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span><span
style="color:#719e07">new</span> JclLoggerAdapter<span
style="color:#719e07">());</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">case</span> Log4jLoggerAdapter<span
style="color:#719e07">.</span>NAME<span style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span><span
style="color:#719e07">new</span> Log4jLoggerAdapter<span
style="color:#719e07">());</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">case</span> JdkLoggerAdapter<span
style="color:#719e07">.</span>NAME<span style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span><span
style="color:#719e07">new</span> JdkLoggerAdapter<span
style="color:#719e07">());</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">case</span> Log4j2LoggerAdapter<span
style="color:#719e07">.</span>NAME<span style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span><span
style="color:#719e07">new</span> Log4j2LoggerAdapter<span
style="color:#719e07">());</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">default</span><span
style="color:#719e07">:</span>
+</span></span><span style="display:flex;"><span> List<span
style="color:#719e07">&lt;</span>Class<span
style="color:#719e07">&lt;?</span> <span
style="color:#268bd2">extends</span> LoggerAdapter<span
style="color:#719e07">&gt;&gt;</span> candidates <span
style="color:#719e07">=</span> Arrays<span
style="color:#719e07">.</span>asList<span
style="color:#719e07">(</span>
+</span></span><span style="display:flex;"><span>
Log4jLoggerAdapter<span style="color:#719e07">.</span>class<span
style="color:#719e07">,</span>
+</span></span><span style="display:flex;"><span>
Slf4jLoggerAdapter<span style="color:#719e07">.</span>class<span
style="color:#719e07">,</span>
+</span></span><span style="display:flex;"><span>
Log4j2LoggerAdapter<span style="color:#719e07">.</span>class<span
style="color:#719e07">,</span>
+</span></span><span style="display:flex;"><span>
JclLoggerAdapter<span style="color:#719e07">.</span>class<span
style="color:#719e07">,</span>
+</span></span><span style="display:flex;"><span>
JdkLoggerAdapter<span style="color:#719e07">.</span>class
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#dc322f">boolean</span> found <span
style="color:#719e07">=</span> <span
style="color:#cb4b16">false</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// try to use the first available adapter
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span style="color:#719e07">for</span>
<span style="color:#719e07">(</span>Class<span
style="color:#719e07">&lt;?</span> <span
style="color:#268bd2">extends</span> LoggerAdapter<span
style="color:#719e07">&gt;</span> clazz <span
style="color:#719e07">:</span> candidates<span
style="color:#719e07">)</span> <span style="color:# [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">try</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> LoggerAdapter
loggerAdapter <span style="color:#719e07">=</span> clazz<span
style="color:#719e07">.</span>getConstructor<span
style="color:#719e07">().</span>newInstance<span
style="color:#719e07">();</span>
+</span></span><span style="display:flex;"><span>
loggerAdapter<span style="color:#719e07">.</span>getLogger<span
style="color:#719e07">(</span>LoggerFactory<span
style="color:#719e07">.</span>class<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">if</span> <span
style="color:#719e07">(</span>loggerAdapter<span
style="color:#719e07">.</span>isConfigured<span
style="color:#719e07">())</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span>loggerAdapter<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> found <span
style="color:#719e07">=</span> <span
style="color:#cb4b16">true</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span> <span
style="color:#719e07">catch</span> <span
style="color:#719e07">(</span>Exception <span
style="color:#719e07">|</span> LinkageError ignored<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// ignore
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">if</span> <span
style="color:#719e07">(</span>found<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span> System<span
style="color:#719e07">.</span>err<span
style="color:#719e07">.</span>println<span
style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo:
Unable to find a proper configured logger to log
out.&#34;</span><span style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">for</span> <span
style="color:#719e07">(</span>Class<span
style="color:#719e07">&lt;?</span> <span
style="color:#268bd2">extends</span> LoggerAdapter<span
style="color:#719e07">&gt;</span> clazz <span
style="color:#719e07">:</span> candidates<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">try</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> LoggerAdapter
loggerAdapter <span style="color:#719e07">=</span> clazz<span
style="color:#719e07">.</span>getConstructor<span
style="color:#719e07">().</span>newInstance<span
style="color:#719e07">();</span>
+</span></span><span style="display:flex;"><span>
loggerAdapter<span style="color:#719e07">.</span>getLogger<span
style="color:#719e07">(</span>LoggerFactory<span
style="color:#719e07">.</span>class<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span>
setLoggerAdapter<span style="color:#719e07">(</span>loggerAdapter<span
style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> found <span
style="color:#719e07">=</span> <span
style="color:#cb4b16">true</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">break</span><span style="color:#719e07">;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span> <span
style="color:#719e07">catch</span> <span
style="color:#719e07">(</span>Throwable ignored<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">// ignore
+</span></span></span><span style="display:flex;"><span><span
style="color:#586e75"></span> <span style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">if</span> <span
style="color:#719e07">(</span>found<span
style="color:#719e07">)</span> <span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> System<span
style="color:#719e07">.</span>err<span
style="color:#719e07">.</span>println<span
style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo:
Using default logger: &#34;</span> <span
style="color:#719e07">+</span> loggerAdapter<span
style="color:#719e07">.</span>getClass<span
style="color:#719e07">().</span>getName<span
style="color:#719e07">()</span> [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#2aa198">&#34;If you cannot see any log, please configure
-Ddubbo.application.logger property to your preferred logging
framework.&#34;</span><span style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span> <span style="color:#719e07">else</span>
<span style="color:#719e07">{</span>
+</span></span><span style="display:flex;"><span> System<span
style="color:#719e07">.</span>err<span
style="color:#719e07">.</span>println<span
style="color:#719e07">(</span><span style="color:#2aa198">&#34;Dubbo:
Unable to find any available logger adapter to log out. Dubbo logs will be
ignored. &#34;</span> <span style="color:#719e07">+</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#2aa198">&#34;Please configure -Ddubbo.application.logger
property and add corresponding logging library to
classpath.&#34;</span><span style="color:#719e07">);</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#719e07">}</span>
+</span></span><span style="display:flex;"><span><span
style="color:#719e07">}</span>
+</span></span></code></pre></div><p>上面这段静态块是在LoggerFactory里面,说明只要LoggerFactory类一加载就会去选择对应的日志提供方。大家可能会发现对日志的提供方其实是可以通过配置来指定的,因为静态块一开始是从当前jvm环境中获取dubbo.application.logger,这个参数是同java
-Ddubbo.application.logger=xxxx去指定的,如果是放在容器里面,就需要配置在容器启动的jvm参数里面。</p>
+<h2 id="使用log4j来提供日志输出">使用Log4j来提供日志输出</h2>
+<p>你不用做过多的处理就可以开启dubbo的日志,因为dubbo默认就是使用log4j。你唯一需要做的就是配置一个name是&quot;com.alibaba.dubbo&quot;的logger就可以了,然后关联到对应的appender。如下:</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;appender</span> name=<span
style="color:#2aa198">&#34;dubboAppender&#34;</span> class=<span
style="color:#2aa198">&#34;org.apache.log4j.DailyRollingFileAppender&#34;</span><span
style="color:#268bd [...]
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;param</span> name=<span
style="color:#2aa198">&#34;File&#34;</span> value=<span
style="color:#2aa198">&#34;E:/dubbo.log&#34;</span> <span
style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;param</span> name=<span
style="color:#2aa198">&#34;DatePattern&#34;</span> value=<span
style="color:#2aa198">&#34;&#39;.&#39;yyyy-MM-dd&#39;.log&#39;&#34;</span>
<span style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;layout</span> class=<span
style="color:#2aa198">&#34;org.apache.log4j.PatternLayout&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;param</span> name=<span
style="color:#2aa198">&#34;ConversionPattern&#34;</span>
+</span></span><span style="display:flex;"><span> value=<span
style="color:#2aa198">&#34;[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} -
%m%n&#34;</span> <span style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/layout&gt;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;/appender&gt;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;logger</span> name=<span
style="color:#2aa198">&#34;com.alibaba.dubbo&#34;</span>
additivity=<span
style="color:#2aa198">&#34;false&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;priority</span> value =<span
style="color:#2aa198">&#34;info&#34;</span><span
style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;appender-ref</span> ref=<span
style="color:#2aa198">&#34;dubboAppender&#34;</span> <span
style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;/logger&gt;</span>
+</span></span></code></pre></div><h2
id="使用logback来提供日志输出">使用logback来提供日志输出</h2>
+<p>这种情况,默认是看不到dubbo的日志输出的,除非出现异常,被你当前系统的日志框架拦截住了。我这里就拿当前使用最多的日志框架logback来做示例。我们知道logback天生和slf4j进行了集成,所以要在项目里面使用logback,调用slf4j暴露的接口就可以。所以要把dubbo的日志输出切换到logback,也就变成了切换到slf4j了。</p>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;timestamp</span> key=<span
style="color:#2aa198">&#34;byDate&#34;</span> datePattern=<span
style="color:#2aa198">&#34;yyyyMMdd&#34;</span><span
style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#586e75">&lt;!-- dubbo log --&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;appender</span> name=<span
style="color:#2aa198">&#34;dubboRolling&#34;</span> class=<span
style="color:#2aa198">&#34;ch.qos.logback.core.rolling.RollingFileAppender&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;Encoding&gt;</span>UTF-8<span
style="color:#268bd2">&lt;/Encoding&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;file&gt;</span>${LOG_HOME_DUBBO}/MTP-DUBBO.log<span
style="color:#268bd2">&lt;/file&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;rollingPolicy</span> class=<span
style="color:#2aa198">&#34;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;fileNamePattern&gt;</span>${LOG_HOME_DUBBO}/DEMO-%d{yyyy-MM-dd}.%i-DUBBO.zip<span
style="color:#268bd2">&lt;/fileNamePattern&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;maxHistory&gt;</span>30<span
style="color:#268bd2">&lt;/maxHistory&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;TimeBasedFileNamingAndTriggeringPolicy</span>
class=<span
style="color:#2aa198">&#34;ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;MaxFileSize&gt;</span>100MB<span
style="color:#268bd2">&lt;/MaxFileSize&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/TimeBasedFileNamingAndTriggeringPolicy&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/rollingPolicy&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;encoder&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;pattern&gt;</span>%d{yyyy-MM-dd
HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n<span
style="color:#268bd2">&lt;/pattern&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;immediateFlush&gt;</span>true<span
style="color:#268bd2">&lt;/immediateFlush&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/encoder&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/appender&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;logger</span> name=<span
style="color:#2aa198">&#34;com.alibaba.dubbo&#34;</span>
level=<span style="color:#2aa198">&#34;DEBUG&#34;</span><span
style="color:#268bd2">&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;appender-ref</span> ref=<span
style="color:#2aa198">&#34;dubboRolling&#34;</span><span
style="color:#268bd2">/&gt;</span>
+</span></span><span style="display:flex;"><span> <span
style="color:#268bd2">&lt;/logger&gt;</span>
+</span></span></code></pre></div><p>Dubbo
也可以将日志信息记录或者保存到文件中。</p>
+<ol>
+<li>使用<code>accesslog</code>输出到<code>log4j</code></li>
+</ol>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:protocol</span> accesslog=<span
style="color:#2aa198">&#34;true&#34;</span> name=<span
style="color:#2aa198">&#34;dubbo&#34;</span> port=<span
style="color:#2aa198">&#34;20880&#34;< [...]
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:protocol</span> accesslog=<span
style="color:#2aa198">&#34;true&#34;</span> name=<span
style="color:#2aa198">&#34;rmi&#34;</span> port=<span
style="color:#2aa198">&#34;1099&#34;</span> <span
style="color:#268bd2">/&gt;</span>
+</span></span></code></pre></div><ol start="2">
+<li>输出到文件</li>
+</ol>
+<div class="highlight"><pre tabindex="0"
style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code
class="language-xml" data-lang="xml"><span
style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:protocol</span> accesslog=<span
style="color:#2aa198">&#34;http://localhost/log.txt&#34;</span>
name=<span style="color:#2aa198">&#34;dubbo&#34;</span>
port=<span style="color:#2aa198">&# [...]
+</span></span><span style="display:flex;"><span><span
style="color:#268bd2">&lt;dubbo:protocol</span> accesslog=<span
style="color:#2aa198">&#34;http://localhost/log2.txt&#34;</span>
name=<span style="color:#2aa198">&#34;rmi&#34;</span>
port=<span style="color:#2aa198">&#34;1099&#34;</span> <span
style="color:#268bd2">/&gt;</span>
+</span></span></code></pre></div></description></item><item><title>Docs3-V2:
健康检查</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/health-information/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/health-information/</guid><description/></item><item><title>Docs3-V2:
K8S探测器</title><link>https://dubbo.apache.org/zh/docs3- [...]
\ No newline at end of file
diff --git
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
index c602bbb77a..8f7966bc98 100644
---
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
+++
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/index.html
@@ -1,10 +1,134 @@
-<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common
logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo
日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher
implements ChannelHandler { private static final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo
采用的日志输出方式是首先从 dubbo.application.logger
系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger =
System."><meta property="og:type" content="article"><meta property="og:url"
content="https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging/"><meta
property="article:section" content="docs3-v2"><meta
property="article:modified_time" content="2023-02-09T16:17:37+08:00"><meta
property="og:site_name" content="Apache Dubbo"><meta itemprop=name
content="日志管理"><meta itemprop=description c [...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common
logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo
日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher
implements ChannelHandler { private static final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo
采用的日志输出方式是首先从 dubbo.application.logger
系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger =
System."><meta itemprop=dateModified content="2023-02-09T16:17:37+08:00"><meta
itemprop=wordCount content="379"><meta itemprop=keywords content><meta
name=twitter:card content="summary"><meta name=twitter:title
content="日志管理"><meta name=twitter:description content="在 Dubbo 框架内所有的日志输出都是通过
LoggerFactory 这个静态工厂类来获得 Logger 的对象实体,并且抽离了一个 LoggerAdapter
用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter, SLF4JLoggerAdapter等一些实
[...]
+第三方日志框架 优先级 Log4j 最高(默认就用这个) SLF4J 次高(上面没有采用这个) Common Logging(jcl就是common
logging) 次低(Log4j和SLF4J在项目中均没有就用这个) JDK log 最低(最后的选择) Dubbo
日志的调用方式,针对不同的日志打印系统,采用统一的 API 调用及输出,如:
+/** * ChannelListenerDispatcher */ public class ChannelHandlerDispatcher
implements ChannelHandler { private static final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(ChannelHandlerDispatcher.class); Dubbo
采用的日志输出方式是首先从 dubbo.application.logger
系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:
+顺序为:log4jLogger > slf4jLogger > JclLogger > JdkLogger
+LoggerFactory 在类加载过程中变量的初始化过程:
+// search common-used logging frameworks static { String logger =
System."><script type=application/javascript>var
doNotTrack=!1;doNotTrack||(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new
Date,ga("create","UA-112489517-1","auto"),ga("send","pageview"))</script><script
async src=https://www.google-analytics.com/analytics.js></script>
<link rel=preload
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css
as=style><link
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin=anonymous></script>
<link rel=stylesheet
href=https://cdn.jsdelivr.net/npm/@docsearch/css@3></head><body
class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand
href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path
class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05
25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7zm0 [...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/observability/logging.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e6%97%a5%e5%bf%97%e7%ae%a1%e7%90%86"
target=_blank><i class="fab fa-github fa-fw"></i> 提交文档问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div></aside><main class="col-12 col-md-9
col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class="d-none d-md-block
d-print-none"><ol class="breadcrumb spb-1"><li class=breadcrumb-item><a
href=https://dubbo.apache.org/zh/docs3-v2/>SDK 手册</a></li><li
class=breadcrumb-item><a
href=https://dubbo.apache.org/zh/docs3-v2/java-sdk/>Java</a></li><li
class=breadcrumb-item><a href=h [...]
-<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav
id=TableOfContents><ul><li><a
href=#使用log4j来提供日志输出>使用Log4j来提供日志输出</a></li><li><a
href=#使用logback来提供日志输出>使用logback来提供日志输出</a></li></ul></nav></div></aside><main
class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb
class="d-none d-md-block d-print-none"><ol class="breadcrumb spb-1"><li
class=breadcrumb-item><a href=https://dubbo [...]
+</span></span></span><span style=display:flex><span><span style=color:#586e75>
* ChannelListenerDispatcher
+</span></span></span><span style=display:flex><span><span style=color:#586e75>
*/</span>
+</span></span><span style=display:flex><span><span
style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span
style=color:#268bd2>ChannelHandlerDispatcher</span> <span
style=color:#268bd2>implements</span> ChannelHandler <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2>private</span> <span style=color:#268bd2>static</span>
<span style=color:#268bd2>final</span> ErrorTypeAwareLogger logger <span
style=color:#719e07>=</span> LoggerFactory<span
style=color:#719e07>.</span>getErrorTypeAwareLogger<span
style=color:#719e07>(</span>ChannelHandlerDispatcher<span
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span></code></pre></div><p>Dubbo 采用的日志输出方式是首先从
dubbo.application.logger
系统变量中获取属性值,来判断到底采用哪种日志输出方式,如果没设置则按照默认的加载顺序加载相应的日志输出类,直到成功加载:</p><p>顺序为:log4jLogger
> slf4jLogger > JclLogger > JdkLogger</p><p>LoggerFactory
在类加载过程中变量的初始化过程:</p><div class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-java data-lang=java><span style=display:flex><span><span
style=color:#586e75>// search common-used logging [...]
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span><span style=color:#268bd2>static</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> String logger <span
style=color:#719e07>=</span> System<span
style=color:#719e07>.</span>getProperty<span style=color:#719e07>(</span><span
style=color:#2aa198>"dubbo.application.logger"</span><span
style=color:#719e07>,</span> <span style=color:#2aa198>""</span><span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>switch</span> <span style=color:#719e07>(</span>logger<span
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>case</span> Slf4jLoggerAdapter<span
style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> setLoggerAdapter<span
style=color:#719e07>(</span><span style=color:#719e07>new</span>
Slf4jLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>case</span> JclLoggerAdapter<span
style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> setLoggerAdapter<span
style=color:#719e07>(</span><span style=color:#719e07>new</span>
JclLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>case</span> Log4jLoggerAdapter<span
style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> setLoggerAdapter<span
style=color:#719e07>(</span><span style=color:#719e07>new</span>
Log4jLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>case</span> JdkLoggerAdapter<span
style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> setLoggerAdapter<span
style=color:#719e07>(</span><span style=color:#719e07>new</span>
JdkLoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>case</span> Log4j2LoggerAdapter<span
style=color:#719e07>.</span>NAME<span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> setLoggerAdapter<span
style=color:#719e07>(</span><span style=color:#719e07>new</span>
Log4j2LoggerAdapter<span style=color:#719e07>());</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>default</span><span style=color:#719e07>:</span>
+</span></span><span style=display:flex><span> List<span
style=color:#719e07><</span>Class<span style=color:#719e07><?</span>
<span style=color:#268bd2>extends</span> LoggerAdapter<span
style=color:#719e07>>></span> candidates <span
style=color:#719e07>=</span> Arrays<span
style=color:#719e07>.</span>asList<span style=color:#719e07>(</span>
+</span></span><span style=display:flex><span>
Log4jLoggerAdapter<span style=color:#719e07>.</span>class<span
style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>
Slf4jLoggerAdapter<span style=color:#719e07>.</span>class<span
style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>
Log4j2LoggerAdapter<span style=color:#719e07>.</span>class<span
style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>
JclLoggerAdapter<span style=color:#719e07>.</span>class<span
style=color:#719e07>,</span>
+</span></span><span style=display:flex><span>
JdkLoggerAdapter<span style=color:#719e07>.</span>class
+</span></span><span style=display:flex><span> <span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#dc322f>boolean</span> found <span style=color:#719e07>=</span>
<span style=color:#cb4b16>false</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#586e75>// try to use the first available adapter
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>for</span>
<span style=color:#719e07>(</span>Class<span style=color:#719e07><?</span>
<span style=color:#268bd2>extends</span> LoggerAdapter<span
style=color:#719e07>></span> clazz <span style=color:#719e07>:</span>
candidates<span style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> LoggerAdapter
loggerAdapter <span style=color:#719e07>=</span> clazz<span
style=color:#719e07>.</span>getConstructor<span
style=color:#719e07>().</span>newInstance<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>
loggerAdapter<span style=color:#719e07>.</span>getLogger<span
style=color:#719e07>(</span>LoggerFactory<span
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>if</span> <span
style=color:#719e07>(</span>loggerAdapter<span
style=color:#719e07>.</span>isConfigured<span style=color:#719e07>())</span>
<span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span>
setLoggerAdapter<span style=color:#719e07>(</span>loggerAdapter<span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> found
<span style=color:#719e07>=</span> <span style=color:#cb4b16>true</span><span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span
style=color:#719e07>(</span>Exception <span style=color:#719e07>|</span>
LinkageError ignored<span style=color:#719e07>)</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#586e75>// ignore
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>if</span> <span style=color:#719e07>(</span>found<span
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span>
+</span></span><span style=display:flex><span> System<span
style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span
style=color:#719e07>(</span><span style=color:#2aa198>"Dubbo: Unable to
find a proper configured logger to log out."</span><span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>for</span> <span style=color:#719e07>(</span>Class<span
style=color:#719e07><?</span> <span style=color:#268bd2>extends</span>
LoggerAdapter<span style=color:#719e07>></span> clazz <span
style=color:#719e07>:</span> candidates<span style=color:#719e07>)</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>try</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> LoggerAdapter
loggerAdapter <span style=color:#719e07>=</span> clazz<span
style=color:#719e07>.</span>getConstructor<span
style=color:#719e07>().</span>newInstance<span style=color:#719e07>();</span>
+</span></span><span style=display:flex><span>
loggerAdapter<span style=color:#719e07>.</span>getLogger<span
style=color:#719e07>(</span>LoggerFactory<span
style=color:#719e07>.</span>class<span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span>
setLoggerAdapter<span style=color:#719e07>(</span>loggerAdapter<span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> found <span
style=color:#719e07>=</span> <span style=color:#cb4b16>true</span><span
style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>break</span><span style=color:#719e07>;</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span> <span style=color:#719e07>catch</span> <span
style=color:#719e07>(</span>Throwable ignored<span style=color:#719e07>)</span>
<span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> <span
style=color:#586e75>// ignore
+</span></span></span><span style=display:flex><span><span
style=color:#586e75></span> <span style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>if</span> <span style=color:#719e07>(</span>found<span
style=color:#719e07>)</span> <span style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> System<span
style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span
style=color:#719e07>(</span><span style=color:#2aa198>"Dubbo: Using default
logger: "</span> <span style=color:#719e07>+</span> loggerAdapter<span
style=color:#719e07>.</span>getClass<span
style=color:#719e07>().</span>getName<span style=color:#719e07>()</span> <span
style=color:#719e07>+</span> <span style=color:#2aa198>".  [...]
+</span></span><span style=display:flex><span> <span
style=color:#2aa198>"If you cannot see any log, please configure
-Ddubbo.application.logger property to your preferred logging
framework."</span><span style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span> <span style=color:#719e07>else</span> <span
style=color:#719e07>{</span>
+</span></span><span style=display:flex><span> System<span
style=color:#719e07>.</span>err<span style=color:#719e07>.</span>println<span
style=color:#719e07>(</span><span style=color:#2aa198>"Dubbo: Unable to
find any available logger adapter to log out. Dubbo logs will be ignored.
"</span> <span style=color:#719e07>+</span>
+</span></span><span style=display:flex><span> <span
style=color:#2aa198>"Please configure -Ddubbo.application.logger property
and add corresponding logging library to classpath."</span><span
style=color:#719e07>);</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span> <span
style=color:#719e07>}</span>
+</span></span><span style=display:flex><span><span style=color:#719e07>}</span>
+</span></span></code></pre></div><p>上面这段静态块是在LoggerFactory里面,说明只要LoggerFactory类一加载就会去选择对应的日志提供方。大家可能会发现对日志的提供方其实是可以通过配置来指定的,因为静态块一开始是从当前jvm环境中获取dubbo.application.logger,这个参数是同java
-Ddubbo.application.logger=xxxx去指定的,如果是放在容器里面,就需要配置在容器启动的jvm参数里面。</p><h2
id=使用log4j来提供日志输出>使用Log4j来提供日志输出</h2><p>你不用做过多的处理就可以开启dubbo的日志,因为dubbo默认就是使用log4j。你唯一需要做的就是配置一个name是"com.alibaba.dubbo"的logger就可以了,然后关联到对应的appender。如下:</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-m [...]
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><param</span> name=<span
style=color:#2aa198>"File"</span> value=<span
style=color:#2aa198>"E:/dubbo.log"</span> <span
style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><param</span> name=<span
style=color:#2aa198>"DatePattern"</span> value=<span
style=color:#2aa198>"'.'yyyy-MM-dd'.log'"</span> <span
style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><layout</span> class=<span
style=color:#2aa198>"org.apache.log4j.PatternLayout"</span><span
style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><param</span> name=<span
style=color:#2aa198>"ConversionPattern"</span>
+</span></span><span style=display:flex><span> value=<span
style=color:#2aa198>"[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} -
%m%n"</span> <span style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></layout></span>
+</span></span><span style=display:flex><span><span
style=color:#268bd2></appender></span>
+</span></span><span style=display:flex><span><span
style=color:#268bd2><logger</span> name=<span
style=color:#2aa198>"com.alibaba.dubbo"</span> additivity=<span
style=color:#2aa198>"false"</span><span style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><priority</span> value =<span
style=color:#2aa198>"info"</span><span style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><appender-ref</span> ref=<span
style=color:#2aa198>"dubboAppender"</span> <span
style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span><span
style=color:#268bd2></logger></span>
+</span></span></code></pre></div><h2
id=使用logback来提供日志输出>使用logback来提供日志输出</h2><p>这种情况,默认是看不到dubbo的日志输出的,除非出现异常,被你当前系统的日志框架拦截住了。我这里就拿当前使用最多的日志框架logback来做示例。我们知道logback天生和slf4j进行了集成,所以要在项目里面使用logback,调用slf4j暴露的接口就可以。所以要把dubbo的日志输出切换到logback,也就变成了切换到slf4j了。</p><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><timestamp</ [...]
+</span></span><span style=display:flex><span> <span
style=color:#586e75><!-- dubbo log --></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><appender</span> name=<span
style=color:#2aa198>"dubboRolling"</span> class=<span
style=color:#2aa198>"ch.qos.logback.core.rolling.RollingFileAppender"</span><span
style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><Encoding></span>UTF-8<span
style=color:#268bd2></Encoding></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><file></span>${LOG_HOME_DUBBO}/MTP-DUBBO.log<span
style=color:#268bd2></file></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><rollingPolicy</span> class=<span
style=color:#2aa198>"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"</span><span
style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><fileNamePattern></span>${LOG_HOME_DUBBO}/DEMO-%d{yyyy-MM-dd}.%i-DUBBO.zip<span
style=color:#268bd2></fileNamePattern></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><maxHistory></span>30<span
style=color:#268bd2></maxHistory></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><TimeBasedFileNamingAndTriggeringPolicy</span>
class=<span
style=color:#2aa198>"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"</span><span
style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><MaxFileSize></span>100MB<span
style=color:#268bd2></MaxFileSize></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></TimeBasedFileNamingAndTriggeringPolicy></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></rollingPolicy></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><encoder></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><pattern></span>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]
%-5level %logger{36} - %msg%n<span style=color:#268bd2></pattern></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><immediateFlush></span>true<span
style=color:#268bd2></immediateFlush></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></encoder></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></appender></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><logger</span> name=<span
style=color:#2aa198>"com.alibaba.dubbo"</span> level=<span
style=color:#2aa198>"DEBUG"</span><span style=color:#268bd2>></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2><appender-ref</span> ref=<span
style=color:#2aa198>"dubboRolling"</span><span
style=color:#268bd2>/></span>
+</span></span><span style=display:flex><span> <span
style=color:#268bd2></logger></span>
+</span></span></code></pre></div><p>Dubbo
也可以将日志信息记录或者保存到文件中。</p><ol><li>使用<code>accesslog</code>输出到<code>log4j</code></li></ol><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:protocol</span> accesslog=<span
style=color:#2aa198>"true"</span> name=<span
style=color:#2aa198>"dubbo"</span> port=<s [...]
+</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:protocol</span> accesslog=<span
style=color:#2aa198>"true"</span> name=<span
style=color:#2aa198>"rmi"</span> port=<span
style=color:#2aa198>"1099"</span> <span style=color:#268bd2>/></span>
+</span></span></code></pre></div><ol start=2><li>输出到文件</li></ol><div
class=highlight><pre tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-xml data-lang=xml><span style=display:flex><span><span
style=color:#268bd2><dubbo:protocol</span> accesslog=<span
style=color:#2aa198>"http://localhost/log.txt"</span> name=<span
style=color:#2aa198>"dubbo"</span> port=<span
style=color:#2aa198>"20880"</spa [...]
+</span></span><span style=display:flex><span><span
style=color:#268bd2><dubbo:protocol</span> accesslog=<span
style=color:#2aa198>"http://localhost/log2.txt"</span> name=<span
style=color:#2aa198>"rmi"</span> port=<span
style=color:#2aa198>"1099"</span> <span style=color:#268bd2>/></span>
+</span></span></code></pre></div><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><div
class=d-print-none><h2 class=feedback--title>Feedback</h2><p
class=feedback--question>Was this page helpful?</p><button class="btn
btn-primary mb-4 feedback--answer feedback--answer-yes">Yes</button>
+<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.9f304eb79b67eb331e2b22923c361575b563af25c0fd56279cf20f3a2417cff4.js
integrity="sha256-nzBOt5tn6zMeKyKSPDYVdbVjryXA/VYnnPIPOiQXz/Q="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
index 490564b447..1d98db2cc2 100644
--- a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
+++ b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/index.xml
@@ -99,9 +99,7 @@ Dubbo协议支持,以及Qos协议支持。这些协议的识别都是由一个
</span></span></span><span style="display:flex;"><span><span
style="color:#586e75">// reference.setProtocol(CommonConstants.TRIPLE);
</span></span></span></code></pre></div><p><img
src="https://dubbo.apache.org/imgs/blog/pu-server/reference-service.png"
alt="pu-server-imgs4"></p></description></item><item><title>Docs3-V2:
分布式事务</title><link>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</link><pubDate>Mon,
01 Jan 0001 00:00:00
+0000</pubDate><guid>https://dubbo.apache.org/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</gu
[...]
<h2 id="特性说明">特性说明</h2>
-<p>提供了对补偿事务的支持。这使开发人员能够在事务失败时回滚事务的影响。分布式事务特性还支持全局事务超时,这允许开发人员指定事务完成的超时时间。</p>
-<p>为分布式事务日志提供了支持。这允许开发人员查看分布式应用程序中所有服务中发生的事务的历史记录。这使他们能够轻松地调试和排除事务。</p>
-<p>提供了对分布式事务恢复的支持。</p>
+<p>分布式事务提供对补偿事务的支持,能够在事务失败时回滚事务的影响,支持全局事务超时,能够指定事务完成的超时时间,对日志提供支持,能够查看分布式应用程序中所有服务中发生的事务的历史记录,能够轻松地调试和排除事务。</p>
<h2 id="使用场景">使用场景</h2>
<ol>
<li>电商:当客户在线购买商品时,提供分布式交易。可以确保订单和付款在不同的数据库和服务中保持同步,有助于防止付款丢失和订单错误。</li>
diff --git
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
index 2614d55eab..c8da2b6ad4 100644
---
a/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
+++
b/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/index.html
@@ -1,9 +1,9 @@
-<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
+<!doctype html><html lang=zh class=no-js><head><meta charset=utf-8><meta
name=viewport
content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta
name=generator content="Hugo 0.110.0"><meta name=ROBOTS content="INDEX,
FOLLOW"><link rel="shortcut icon" href=/favicons/favicon.ico><link
rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png
sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png
sizes=16x16><link rel=icon type=image/png href=/favicons [...]
<link rel=preload
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css
as=style><link
href=/scss/main.min.8637cb48af1c2672dbf22e4e83652c0cebe2d667477b88c8a046be155bcf7cfe.css
rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin=anonymous></script>
<link rel=stylesheet
href=https://cdn.jsdelivr.net/npm/@docsearch/css@3></head><body
class=td-page><header><nav class="js-navbar-scroll navbar navbar-expand
navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand
href=/zh/><span class=navbar-logo><svg xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 321.39 78.54"><title id="title19">DUBBO LOGO</title><path
class="cls-1" d="M68.46 50.38c0 14.06 11.39 22.11 25.45 22.11s25.45-8.05
25.45-22.11V7.25H68.46zm21.24-28h8.6V31H89.7zm0 [...]
<a
href="https://github.com/apache/dubbo-website/new/master/content/zh/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2
[...]
<a
href="https://github.com/apache/dubbo-website/issues/new?title=%e5%88%86%e5%b8%83%e5%bc%8f%e4%ba%8b%e5%8a%a1"
target=_blank><i class="fab fa-github fa-fw"></i> 提交文档问题</a>
-<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav
id=TableOfContents><ul><li><a href=#特性说明>特性说明</a></li><li><a
href=#使用场景>使用场景</a></li><li><a href=#使用方式>使用方式</a><ul><li><a
href=#第一步><strong>第一步</strong></a></li><li><a
href=#第二步><strong>第二步</strong></a></li><li><a
href=#第三步><strong>第三步</strong></a></li><li><a
href=#第四步><strong>第四步</strong></a></li><li><a
href=#第五步><strong>第五步</strong></a></li><li><a h [...]
+<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas
fa-tasks fa-fw"></i> 提交项目问题</a></div><div class=td-toc><nav
id=TableOfContents><ul><li><a href=#特性说明>特性说明</a></li><li><a
href=#使用场景>使用场景</a></li><li><a href=#使用方式>使用方式</a><ul><li><a
href=#第一步><strong>第一步</strong></a></li><li><a
href=#第二步><strong>第二步</strong></a></li><li><a
href=#第三步><strong>第三步</strong></a></li><li><a
href=#第四步><strong>第四步</strong></a></li><li><a
href=#第五步><strong>第五步</strong></a></li><li><a h [...]
</span></span></span><span style=display:flex><span><span
style=color:#586e75></span><span style=color:#719e07>CREATE</span> <span
style=color:#719e07>TABLE</span> <span style=color:#719e07>IF</span> <span
style=color:#719e07>NOT</span> <span style=color:#719e07>EXISTS</span> <span
style=color:#719e07>`</span>undo_log<span style=color:#719e07>`</span>
</span></span><span style=display:flex><span>(
</span></span><span style=display:flex><span> <span
style=color:#719e07>`</span>branch_id<span style=color:#719e07>`</span>
<span style=color:#b58900>BIGINT</span>(<span style=color:#2aa198>20</span>)
<span style=color:#719e07>NOT</span> <span style=color:#719e07>NULL</span>
<span style=color:#719e07>COMMENT</span> <span style=color:#2aa198>'branch
transaction id'</span>,
@@ -281,7 +281,7 @@
</span></span></code></pre></div><p>windows</p><div class=highlight><pre
tabindex=0
style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code
class=language-shell data-lang=shell><span style=display:flex><span><span
style=color:#b58900>cd</span> bin
</span></span><span style=display:flex><span>./seata-server.bat
</span></span></code></pre></div><p>运行 seata-server,成功后,运行自己的服务 dubbo
provider&consumer</p><h3 id=第八步高可用-seata-server-搭建><strong>第八步高可用 Seata-server
搭建</strong></h3><p>由于 seata-server
支持计算与存储分离模式,并支持暴露服务地址至多种注册中心,仅需按照第六步配置完毕后水平扩展即可</p><p>详情请访问:https://seata.io/</p><style>.feedback--answer{display:inline-block}.feedback--answer-no{margin-left:1em}.feedback--response{display:none;margin-top:1em}.feedback--response__visible{display:block}</style><div
class=d-print-none><h2 class=feedback--t [...]
-<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
+<button class="btn btn-primary mb-4 feedback--answer
feedback--answer-no">No</button><p class="feedback--response
feedback--response-yes">Glad to hear it! Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p><p class="feedback--response feedback--response-no">Sorry to
hear that. Please <a
href=https://github.com/apache/dubbo-website/issues/new>tell us how we can
improve</a>.</p></div><script>const yesButton=document.querySelector(".feedback
[...]
<script src=/js/bootstrap.min.js
integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy
crossorigin=anonymous></script>
<script
src=/js/main.min.9f304eb79b67eb331e2b22923c361575b563af25c0fd56279cf20f3a2417cff4.js
integrity="sha256-nzBOt5tn6zMeKyKSPDYVdbVjryXA/VYnnPIPOiQXz/Q="
crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script>
diff --git a/zh/sitemap.xml b/zh/sitemap.xml
index 3ed6e3556c..925d68a1fb 100644
--- a/zh/sitemap.xml
+++ b/zh/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en"
href="https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link
rel="alternate" hreflang="zh" href="https://dubbo.a [...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://dubbo.apache.org/zh/docs3-v2/java-sdk/faq/0/</loc><lastmod>2022-08-01T10:49:31+08:00</lastmod><changefreq>monthly</changefreq><priority>0.5</priority><xhtml:link
rel="alternate" hreflang="en"
href="https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/"/><xhtml:link
rel="alternate" hreflang="zh" href="https://dubbo.a [...]
\ No newline at end of file